#javascript #date
#javascript #Дата
Вопрос:
Я нашел эту функцию в Интернете, и это именно то, что мне нужно, но если бы кто-нибудь мог рассказать, как это работает, я был бы очень признателен. Почему нет ошибки, когда дата не определена? Какие два аргумента 0 передаются? Также разделение в конце … это деление результата на миллисекунды / минуты / часы?
function dayOfTheYear(date) {
return Math.floor((date - new Date(date.getFullYear(), 0, 0)) / 1000 / 60 / 60 / 24);
}
Пример:
function dayOfTheYear(date) {
return Math.floor((date - new Date(date.getFullYear(), 0, 0)) / 1000 / 60 / 60 / 24);
}
console.log(dayOfTheYear());
Комментарии:
1. Пожалуйста, вы ясно видите, что без использования
date
это явно не работает . Отредактируйте свой вопрос, чтобы добавить больше деталей вашего варианта использования.2. Два нуля — это месяц и день, которые создают объект Date, представляющий 1 января, полночь. Вычитание этого значения из пройденного
date
дает миллисекунды с начала текущего года, а деление его на миллисекунды в день дает день года.
Ответ №1:
Она нуждается в незначительных исправлениях и обеспечивает желаемый результат.
/* another way extending Date */
class myDate extends Date {
constructor(date) {
super(date);
}
dayOfTheYear() {
let dte = this;
let year = dte.getFullYear();
return Math.floor((dte - new Date(year, 0, 0)) / 1000 / 60 / 60 / 24);
}
}
function dayOfTheYear(date) {
let dte = new Date(date);
let year = dte.getFullYear();
/*
this part is all the work, (dte - new Date(year, 0, 0)) is actually
current date - first day of the year 0 hour, 0 minute, 0second, 0 millisecond
and return a timestamp in milliseconds,
the rest of the divisions are needed to turn milliseconds to days
*/
return Math.floor((dte - new Date(year, 0, 0)) / 1000 / 60 / 60 / 24);
}
let dt = new myDate('2020-09-16');
console.log('Child class output day of the year 2020-09-16: ' dt.dayOfTheYear());
console.log('Child class output of full year inherited from parent class: ' dt.getFullYear());
console.log('Function output day of the year 2020-09-16: ' dayOfTheYear('2020-09-16'));
console.log('Function output day of the year 2020-01-11: ' dayOfTheYear('2020-01-11'));
console.log('Function output day of the year 2020-01-01: ' dayOfTheYear('2020-01-01'));
console.log('Function output day of the year 2020-12-31: ' dayOfTheYear('2020-12-31'));
console.log('Function output day of the year 2020-03-16: ' dayOfTheYear('2020-03-16'));