2014-03-13 5 views
1

Привет, ребята Его просто прослушивают.Javascript Date.getTime() проблемы с форматом

У меня здесь две даты w/c такие же, но в разных форматах.

var date1 = new Date('1985-04-15'); //April 04, 1985 
var date2 = new Date('04/15/1985'); //April 04, 1985 

теперь проблема при преобразовании этого два «времени»

date1.getTime() would output 482371200000 // 
date2.getTime() would output 482342400000 // 

кто-то может объяснить мне, почему эти два выхода различных значений? «/» или «-» влияет на то, как дата была преобразована во времени?

+1

один находится в GMT ("-"), один в местное время ("/"). – dandavis

+1

, поэтому знак слэш и минус действительно влияет на весь вывод? thanks @dandavis – user1073113

+0

Замечательный пример того, почему вы не должны разбирать строки даты с помощью конструктора Date. Сделайте это вручную. – RobG

ответ

1

Вы можете подключить номера обратно в Date конструктору, чтобы увидеть, какие даты он генерации, например:

new Date('1985-04-15').getTime(); 
482371200000 
new Date('04/15/1985').getTime() 
482335200000 
new Date(482335200000) 
Mon Apr 15 1985 00:00:00 GMT+1000 (AUS Eastern Standard Time) 
new Date(482371200000) 
Mon Apr 15 1985 10:00:00 GMT+1000 (AUS Eastern Standard Time) 

Так по какой-то причине в Chrome, то один с Slashes становится установлен часовой пояс плюс (я полагаю, что это мой смещение по времени. Я знаю, что это не ответ, но я не мог опубликовать все это в разделе комментариев, извините.

+1

Да, это просто путают, почему они разные, как сказал @dandavis, знак слэш и минус влияет на дату создания. – user1073113

+1

Есть все, что вы можете прочитать о том, как работает Date.parse, это буквально, как вы говорите: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse см.: Различия в предполагаемой временной зоне –

+1

Я думаю, что я бы посоветовал не передавать строки в таком виде, если вы можете этого избежать, я чувствую, что видел проблемы с перекрестным браузером при разборе строк строки свободной формы, особенно если вам нужно работайте со старыми браузерами. –

0

Объяснение дать здесь https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse

new Date() или Date.parse() принимает часовой пояс, если часовой пояс не указан в строке ввода. Предположение может быть неправильным для некоторых строковых форматов.

Вы всегда можете получить время UTC с помощью Date.UTC

var date1 = new Date('1985-04-15'); //April 04, 1985 
var date2 = new Date('04/15/1985'); //April 04, 1985 

Теперь вместо того, чтобы использовать date1.getTime() использовать Date.UTC

Date.UTC(date1.getFullYear(), date1.getMonth(), date1.getDate()) //482371200000 
Date.UTC(date2.getFullYear(), date2.getMonth(), date2.getDate()) //482371200000 
Смежные вопросы