JavaScript - Date.now() возвращает неправильную дату [дубликат]

avatar
pika_pika
8 апреля 2018 в 10:49
479
1
1

Я хочу получить количество дней между заданной датой и сегодняшним днем.

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

HTML

<span id="today1">xxx</span> days - wrong
<br>
<span id="today2">xxx</span> days - wrong
<br>
<span id="hardcoded">xxx</span> days - correct

JS

var startDate = new Date(2016,04,01).getTime();
var todayDate1 = new Date().getTime();
var todayDate2 = Date.now();
var hardcodedDate = new Date(2018,04,08).getTime();

$("#today1").html(Math.floor((todayDate1 - startDate)/8.64e7));
$("#today2").html(Math.floor((todayDate2 - startDate)/8.64e7));
$("#hardcoded").html(Math.floor((hardcodedDate - startDate)/8.64e7));

Результат

707 days - wrong
707 days - wrong
737 days - correct

JSFiddle

Что я упустил?

Источник
T.J. Crowder
8 апреля 2018 в 10:52
4

Как вы думаете, какую дату дает вам new Date(2016,04,01)? Подсказка: это примерно через месяц, а не сегодня. Редактировать: не уверен, почему я скромничаю с этим: номера месяцев начинаются с 0 = январь.

T.J. Crowder
8 апреля 2018 в 10:53
2

(Примечание: настоятельно не рекомендуется использовать начальные 0 для чисел, хотя в современных движках JavaScript это не должно запускать восьмеричный анализ в старом стиле.)

Bergi
8 апреля 2018 в 10:53
4

Месяц 4 — май.

pika_pika
8 апреля 2018 в 11:12
0

Спасибо всем. Отсортировано сейчас.

Ответы (1)

avatar
phihag
8 апреля 2018 в 10:54
3

Сегодня 8 апреля 2018 года. new Date(2018, 4, 8) May 8, 2018. Цитирование MDN Документация на Date Конструктор:

Аргумент месяц: 0-based. Это означает, что January = 0 и December = 11.

Используйте 3 в качестве параметра месяца для ссылки на апрель.

pika_pika
8 апреля 2018 в 10:56
0

Спасибо, установка startDate на Date(2016,03,01) дала мне нужный результат.