2010-09-01 3 views
5

Я пытаюсь понять больше о объекте Date в javascript. Я думал, что когда вы вызываете valueOf(), вы получаете количество миллисекунд с 1 января 1970 года. Так что я ожидаю, что следующее должно возвращать ровно нуль;Дата javascript

alert((new Date(1970, 1, 1).valueOf())/ (86400 * 1000)); 

, но это не так, оно возвращает 30.958333333333332. Что мне не хватает?

гр,

Coen

+2

Как вы ожидали получить нуль от деления? – Stephen

+1

Странный вопрос, Стивен. – slikts

+0

@ Stephen, это странно заявлено, но я думаю, что он ожидал, что числитель будет равен 0. Не знаю, почему подразделение там, хотя ... – Kendrick

ответ

2

Второй параметр, месяц, начинается с 0, так что вам нужно сделать:

alert((new Date(1970, 0, 1).valueOf())/ (86400 * 1000)); 

, но даже с этим вы получите смещение в секундах, от GMT.

значение вы вывесили говорит, что вы GMT +1:)

+0

Какова причина начинающих месяцев с 0 и днями с 1? – Coen

+0

Прочтите ответы на [это] (http://stackoverflow.com/questions/393462/defend-zero-based-arrays). – Stephen

+0

Мы не говорим о ноль. http://www.amazon.com/Zero-Biography-Dangerous-Charles-Seife/dp/0140296476 – Incognito

0

Метод вы ищете является .getTime() не .valueOf()

+1

Согласно W3Schools, они одинаковы. Быстрая самопроверка - ' 'показывает, что это работает (для меня, в этот точный момент времени.) У вас есть источник, который противоречит этому? – Stephen

6

новые Дата (1970, 1, 1) на самом деле месяца Feb. равны нулю индексированные. Попробуйте изменить его на новую дату (1970, 0, 1).

+0

Jeez Javascript. С каких пор кто-нибудь ссылается на январь как на нулевой месяц? – jessegavin

+0

@jessegavin: с 1996 года. Http://download.oracle.com/javase/1.4.2/docs/api/java/util/Date.html - это то, из чего было выведено поведение JavaScript (на самом деле JScript) 'Date'. –

+0

Номера всегда должны начинаться с 0, мы живем в действительно перепутавшемся мире. Просто посмотрите на несогласованность только этого конструктора. Первый месяц - 0, первый день - 1, первый год - 1970 год, что, черт возьми? : p – Incognito

0

Месяцы равны нулю в объектах даты.

0

1 января 1970 года составляет new Date(1970, 0, 1), начиная с месяцев начиная с 0 = Январь.

0

Первого января 1970 года с объектом Date является new Date(1970, 0, 1)

2

Если вы хотите работать с unix epoch time, у вас есть несколько вариантов

  • UTC() Возвращает количество миллисекунд в строка даты с полночь от 1 января 1970 года, согласно универсальному времени
  • setTime() Устанавливает дату и время на сложения или вычитания заданного количества миллисекунд до/из полуночи 1 января 1970
  • parse() разбирает строка даты и возвращает количество миллисекунд с полуночи 1 января 1970
  • getTime() Возвращает количество миллисекунд с полуночи 1 января 1970

valueOf() возвращает примитив значения, я бы держаться подальше от него и работать с указанными выше опций.

источник: http://www.w3schools.com/jsref/jsref_obj_date.asp.

редактировать: также, ваш запрашиваемая 1 февраля, 1970

использовать это, это опасно идти в одиночку:

var d=new Date(1970, 0, 1); 
document.write(d.getTime()); 

или

var d= Date.parse("Jan 1, 1970"); //Note, we don't use NEW keyword. 
document.write(d); 

Помните, epcoh это Ср дек 31 1969 19:00:00 GMT-0500. Если вы используете .getTime(), вы увидите время UTC Чт, 01 января 1970 00:00:00 GMT +0000.

+2

'valueOf()' возвращает представление даты в примитиве, которое в этом случае является числом. Это делает значения 'valueOf()' и 'getTime()' эквивалентными для объектов Date. –

+0

следующее не возвращается; alert (Date.parse («1970-1-1»)/(86400 * 1000)) – Coen

+0

@Coen: Вы должны использовать параметр «0» как месяц, и лучше не использовать парсер для установки даты, просто используйте 'new Date (1970, 0, 1)'. –

0

это был месяц, который должен был быть 0 в сочетании с часовым отличием от GMT

оповещения ((новая дата (1970, 0, 1 , 1, 0, 0, 0) .valueOf()));

производит 0

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