Я хотел бы знать, как я могу получить первый и последний день определенной недели в Javascript.
Например, если у меня есть 14-я неделя 2016 года, то первый день — 4 апреля (понедельник), а последний — 10 апреля (воскресенье).
Единственное, что я нашел, это принять текущую дату системы как Date , но не за конкретную неделю.
Я оставлю два метода для выполнения вычислений без использования внешних библиотек, только с помощью JavaScript. Каждый метод будет возвращать разные значения.
Способ 1: календарная неделя
Этот метод считает, что первая неделя года начинается с первого дня года, независимо от того, какой это конкретный день.
Вот демонстрация (я немного упрощаю расчет первого и последнего дня недели):
Метод 2: неделя ISO
В этом методе считается, что первая неделя года начинается в первый понедельник года (что может привести к тому, что некоторые дни недели будут потеряны).
Идея аналогична предыдущему способу, разница только в том, что мы сначала вычисляем, какой день недели является первым днем года, а оттуда корректируем так, чтобы вычисляемая дата всегда совпадала с понедельником.
Вот демо:
Дата имеет свои ограничения, вы всегда можете создать свои собственные методы, но даты сложны, так как есть несколько исключений из правила. По этой причине использование такой библиотеки, как momentjs, включает в себя решения, а не проблемы.
Я оставляю вам пример (вы должны открыть консоль с помощью F12, чтобы увидеть результаты)
**
**
// Устанавливаем дату со значением больше 0
// Указываем номер месяца и отнимаем 1
// Позиционируем себя в понедельник
// первый день недели
// последний день недели
В оракуле это можно получить следующим образом
Таким образом, вы можете найти первый и последний день недели, начиная с номера недели и года, с которым вам нужно ознакомиться, в данном случае 32 — это код недели для 2017 года.
Я надеюсь, что этот код поможет нескольким людям (переработайте код, который я нашел здесь). Таким образом, мы получаем естественные недели определенного года, неделя 1 начинается 1 января выбранного года и заканчивается в ближайшее воскресенье.