В чем разница между этими "новыми датами ()"? - PullRequest
2 голосов
/ 30 апреля 2020

var today = new Date();
var endYear = new Date(1995, 11, 31, 23, 59, 59, 999); // Set day and month
endYear.setFullYear(today.getFullYear()); // Set year to this year
console.log("Version 1: end year full date is ", endYear);
var msPerDay = 24 * 60 * 60 * 1000; // Number of milliseconds per day
var daysLeft = (endYear.getTime() - today.getTime()) / msPerDay;
var daysLeft = Math.round(daysLeft); //returns days left in the year
console.log(daysLeft,endYear);

// when l write that code answer is 245.


var today = new Date();
var endYear = new Date(2021, 0, 0, 0, 0, 0, 0); // Set day and month
console.log("Version 2: end year full date is ", endYear);    
var msPerDay = 24 * 60 * 60 * 1000; // Number of milliseconds per day
var daysLeft = (endYear.getTime() - today.getTime()) / msPerDay;
var daysLeft = Math.round(daysLeft); //returns days left in the year
console.log(daysLeft,endYear);

// but when l add only 1 ms then answer returns like 244. but how is it possible? where has 1 day gone?

1 Ответ

1 голос
/ 30 апреля 2020

Это разница со временем, которое вы установили.

Для ясности,

первый endYear напечатает Thu Dec 31 2020 23:59:59

второй endYear будет печатать Thu Dec 31 2020 00:00:00

Это разница, которую вы видите там.

Я также опубликую полный текст, полученный мной, на консоли.

Thu Dec 31 2020 23:59:59 GMT+0530 (India Standard Time)
245.0131708912037
245
Thu Dec 31 2020 00:00:00 GMT+0530 (India Standard Time)
244.01317090277777
244

=== =============== РЕДАКТИРОВАТЬ ==================

new Date(2021, 0, 0, 0, 0, 0, 0) вычисляет это в De c 31-е, потому что дата индексируется с 1, а не с нуля. Если это значение равно нулю, оно вычисляется как день до 31 декабря.

Например,

new Date(Date.UTC(2021, 1, 0, 0, 0, 0, 0)) выведет Sat Jan 31 2021 05:30:00 GMT+0530 (India Standard Time)

и

new Date(Date.UTC(2021, 1, -1, 0, 0, 0, 0)) распечатает Sat Jan 30 2021 05:30:00 GMT+0530 (India Standard Time)

...