2013-06-28 6 views
29

Я пытаюсь конвертировать миллисекунды в дату, используя JavaScript, используя:новая Дата (миллисекунды) возвращает неверную дату

new Date(Milliseconds); 

конструктор, но когда я даю ему значение миллисекунды сказать 1372439683000 возвращает неверную дату. Если я перейду к site that converts milliseconds to date, он вернет правильную дату.

Любые идеи, почему?

+1

'alert (новая дата (1372439683000));' работает для меня. Что вы подразумеваете под «неверной датой» именно так, какой результат вы получаете? –

+1

@Pekka 웃 OP получает объект 'Date', который строит на« Invalid Date ». (например, try out 'alert (new Date (" "))) – apsillers

ответ

64

Вы не используете номер, вы используете строку , которая выглядит как номер. Согласно MDN, когда вы передаете строку в Date, он ожидает

формат, распознаваемый методом синтаксического анализа (IETF RFC-совместимый 2822 временных отметок).

Примером такой строки является «December 17, 1995 03:24:00», но вы передаете в строку, которая выглядит как «1372439683000», который не в состоянии быть разобран.

Преобразовать Milliseconds в число с помощью parseInt или унарный +:

new Date(+Milliseconds); 
new Date(parseInt(Milliseconds,10)); 
+0

' new Date (929397621000) 'в Инструментах разработчика возвращает корректно форматированную строку даты' Mon Jun 14 1999 15:00:21 GMT-0700 (PDT) 'еще, когда я пытаюсь проверить объект, он показывает« Недействительная дата ». И в фактическом коде, где это используется, он также создает недопустимую дату. – Michael

+1

@Michael Это, похоже, отличается от описанной здесь. Вы делаете 'console.dir (новая дата (929397621000))'?Если это так, просмотр '__proto__: Invalid Date' внутри этого экземпляра является правильным (или, по крайней мере, неудивительным) поведением. Прототип 'Date' * * * - недопустимая дата; действительная дата существует на экземплярах 'Date' * *, а не на прототипе. – apsillers

+0

Я вхожу в выражение непосредственно в виде часов в инструментах разработчика Chrome. Мой код в основном делает то же самое. Поскольку я называю 'new', который должен создать действительный объект Date, да? Как ни странно, даже 'new Date()' создает недопустимую дату (что отладчик может странно корректно строчить), который я не могу проверить элементы (поскольку он показывает только «Недействительная дата»), поэтому, возможно, это проблема в кабине. – Michael

3

Date функция чувствительна к регистру:

new Date(Milliseconds); 
1

вместо этого

new date(Milliseconds); 

использования этого

new Date(Milliseconds); 

ваше заявление даст вам дата не определена ошибки

0

Я получаю эту ошибку из-за другой причине.

Я прочитал ключ от redis, чье значение json.

client.get(someid, function(error, somevalue){});

Теперь я пытался получить доступ к полям внутри somevalue (это строка), как somevalue.start_time, без разбора объекта JSON. Это возвращалось «undefined», которое, если оно передано конструктору даты, new Date(somevalue.start_time) возвращает «Недействительная дата».

Итак, сначала используя JSON.parse(somevalue), чтобы получить объект JSON перед доступом к полям внутри json, решил проблему.

Смежные вопросы