Количество недель в году, получение номера недели по дате | JavaScript

У объекта Date нет метода для недели. Для стандарта ISO 8601 решение было озвучено на techblog.procurios.nl


Порядковый номер недели:
Количество недель в году:
<input type="date" id="week">
<br>Порядковый номер недели: <output></output>
<br>Количество недель в году: <output></output>

<script>
Date.prototype.getWeek = function () {
    var target  = new Date(this.valueOf());
    var dayNr   = (this.getDay() + 6) % 7;
    target.setDate(target.getDate() - dayNr + 3);
    var firstThursday = target.valueOf();
    target.setMonth(0, 1);
    if (target.getDay() != 4) {
        target.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);
    }
    return 1 + Math.ceil((firstThursday - target) / 604800000);
}

var DW = document.querySelector('#week'),
    NW = document.querySelector('#week ~ output'),
    NWG = document.querySelector('#week ~ output ~ output');

DW.value = new Date().toJSON().slice(0,10);  // сегодняшняя дата в формате yyyy-mm-dd для input type="date"
NW.innerHTML = new Date(DW.value).getWeek();  // номер текущей недели
NWG.innerHTML = new Date(new Date(DW.value).getFullYear(),11,28).getWeek();  // 28 декабря всегда имеет последний порядковый номер недели указанного (не следующего) года

DW.oninput = function() {
  NW.innerHTML = new Date(DW.value).getWeek();
  NWG.innerHTML = new Date(new Date(DW.value).getFullYear(),11,28).getWeek();
}
</script>

Результат можно проверить с помощью <input type="week"/>. Текущую неделю можно получить с помощью нашей же функции:

<input type="week"/>
<script>document.querySelector('input[type="week"]').value = new Date().toJSON().slice(0,4) + '-W' + new Date().getWeek();</script>
в f t
наверх ↑

2 комментария:

Alexander
OK, введы 01/01/2016.... удачи
NMitra
Всё правильно считает, см. http://shpargalkablog.ru/2013/11/how-many-week.html#year Первая неделя года может иметь порядковый номер 53.