Исправить ошибки функции Date.getWeek () в последние дни года? - PullRequest
0 голосов
/ 24 марта 2019

Я использую функцию для получения weekNumber в моем приложении, возвращая в результате целое число, которое работает как задумано, код:

Date.prototype.getWeek = function(dowOffset) {

  dowOffset = Number.isInteger(dowOffset)? dowOffset : 0; //default dowOffset to zero
  var newYear = new Date(this.getFullYear(), 0, 1);
  var day = newYear.getDay() - dowOffset; //the day of week the year begins on
  day = (day >= 0 ? day : day + 7);
  var daynum = Math.floor((this.getTime() - newYear.getTime() -
    (this.getTimezoneOffset() - newYear.getTimezoneOffset()) * 60000) / 86400000) + 1;
  var weeknum;
  //if the year starts before the middle of a week
  if (day < 4) {
    weeknum = Math.floor((daynum + day - 1) / 7) + 1;
    if (weeknum > 52) {
      nYear = new Date(this.getFullYear() + 1, 0, 1);
      nday = nYear.getDay() - dowOffset;
      nday = nday >= 0 ? nday : nday + 7;
      /*if the next year starts before the middle of
        the week, it is week #1 of that year*/
      weeknum = nday < 4 ? 1 : 53;
    }
  } else {
    weeknum = Math.floor((daynum + day - 1) / 7);
  }
  return weeknum;
};

for (var d, i=10; i; i--) {
  d = new Date(2029 - i, 11, 31);
  console.log(d.toString() +  ' which is week ' + d.getWeek(1));
}

(Ответ взят из JavaScript Date.getWeek ()

Это все работает как задумано, но если последние дни года (скажем, 30 декабря и 31 декабря) попадают в первую неделю года, они не читают их в течение недели 1, вместо этого ошибки не возвращают результата ?

Как бы я изменил этот код, чтобы результат возвращал номер первой недели, когда дни могли бы быть в пределах последнего месяца года?

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