Как работает эта функция dayOfTheYear?

#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'));