Почему эта операция с датой (количество дней между двумя датами) возвращает это значение? - PullRequest
0 голосов
/ 27 сентября 2011

В соответствии с этим вопросом я написал «мой код» (без Math.abs, он мне не нужен):

var oneDay = 24 * 60 * 60 * 1000; // hours*minutes*seconds*milliseconds
var firstDate = new Date("2011", "09", "28"); // 28 september 2011
var secondDate = new Date("2011", "09", "30"); // 30 september 2011

var notti = ((secondDate.getTime() - firstDate.getTime()) / (oneDay));
if (notti < 1)
    notti = 1;
else
    notti = Math.round(notti);

alert(notti);

и он напечатает 2 (правильно),

Теперь, если я сделаю это:

var oneDay = 24 * 60 * 60 * 1000; // hours*minutes*seconds*milliseconds
var firstDate = new Date("2011", "09", "28"); // 28 september 2011
var secondDate = new Date("2011", "10", "01"); // 01 october 2011

var notti = ((secondDate.getTime() - firstDate.getTime()) / (oneDay));
if (notti < 1)
    notti = 1;
else
    notti = Math.round(notti);

alert(notti);

, это напечатает 4. Почему 4?Должно быть 3 ... Знаете ли вы об этой проблеме?

Ответы [ 3 ]

3 голосов
/ 27 сентября 2011

Аргумент month в конструкторе даты (и других методах даты) запускается из [0.11], а не [1..12], поэтому:

new Date("2011", "09", "28"); // 28 september 2011

на самом деле Fri Oct 28, а не сентябрь.

2 голосов
/ 27 сентября 2011

Месяцы Javascript начинаются с нуля. Итак, в октябре 31 день.

new Date("2011", "9", "31"); // October 31st
1 голос
/ 27 сентября 2011

Потому что ...

new Date("2011", "09", "28").toString()

... возвращает:

Fri Oct 28 2011 00:00:00 GMT-0400 (EDT)

Это потому, что JavaScript Data основан на объекте Java Date , , который является беспорядком . См. Также «Puizzle 61: игра знакомств» в книге JavaPuzzlers для объяснения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...