Оптимизированный поиск первого дня недели в JavaScript
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для определения начала недели в JavaScript, используйте объект Date
:
const today = new Date();
const firstDayOfWeek = new Date(today.setDate(today.getDate() – today.getDay()));
Этот код возвращает прошлое воскресенье. Если вам надо определить понедельник, используйте следующий код:
const today = new Date();
const adjustDay = today.getDay() === 0 ? 6 : today.getDay() – 1;
const firstDayOfWeek = new Date(today.setDate(today.getDate() – adjustDay));
Мы модифицируем значение, возвращаемое методом today.getDay()
, чтобы задать желаемый день недели как начальный.
Настройка начала вашей недели
Ваша неделя может начинаться с любого дня, который вы определите.
Выбирайте начальный день вашей недели
Для настройки начального дня недели согласно вашим предпочтениям:
function getFirstDayOfWeek(date, firstDay = 0) {
date = new Date(date);
const dayOfWeek = date.getDay();
const firstDayDate = new Date(date.setDate(date.getDate() – (dayOfWeek – firstDay + 7) % 7));
firstDayDate.setHours(0, 0, 0, 0);
return firstDayDate;
}
// Теперь можно установить любой день недели как начальный, передав его номер
Учет различных часовых поясов
Для учета различных часовых поясов:
const dateInUTC = new Date().toISOString();
Расширенные возможности с помощью библиотек
Для упрощения работы используйте библиотеку Date.js:
Date.today().previous().monday();
Посетите Date.js, чтобы открыть для себя новые возможности работы с датами.
Производительность при работе с MongoDB
Стремитесь к оптимизации при использовании JavaScript в map-функциях MongoDB.
Оптимизация в MongoDB
Нужно найти баланс между экономией на создании объектов и точностью расчета дат:
function getMonday(date) {
const day = date.getDay();
const diff = date.getDate() – day + (day == 0 ? -6 : 1);
return new Date(date.getFullYear(), date.getMonth(), diff);
}
// Это будет полезно для разработчиков, работающих с MongoDB
Бенчмаркинг для поддержания высокой производительности
Не забывайте проводить бенчмаркинг операций с датами в MongoDB.
Визуализация
На примере покажем, как определить начальный день недели:
📅 Текущая дата: [🌲, 🌲, 🌲, 🎪, 🌲, 🌲, 🌲]
Устанавливаем начальный день:
let today = new Date();
let firstDayOfWeek = new Date(today.setDate(today.getDate() – today.getDay()));
Теперь видим, какой день отмечен как начало недели:
📅 Начальный день: [🎪, ⛺, ⛺, ⛺, ⛺, ⛺, ⛺]
Начальный день недели обозначен символом первой палатки (🎪
). Это ваш старт недели.
Работа с различными случаями в коде
Будьте готовы к выполнению сложных манипуляций и обработке крайних случаев.
Учёт високосного года
Не забывайте учитывать високосный год:
const year = new Date().getFullYear();
const isLeap = new Date(year, 1, 29).getMonth() === 1;
Учет перехода на летнее время
Переход на летнее время может представить сложности:
const date = new Date();
const currentOffset = date.getTimezoneOffset();
Переиспользование и читабельность кода
Очень важно писать легко читаемый и легко воспроизводимый код. В этом важный секрет эффективной работы в команде.
Полезные материалы
- Date.prototype.getDay() – JavaScript | MDN — Информация о методе получения дня недели.
- JavaScript – get the first day of the week from current date — Обсуждение способов определения начального дня недели.
- Date.prototype.setDate() – JavaScript | MDN — Детализация метода setDate для работы с датами.
- date-fns – современная JavaScript-библиотека для работы с датами — Библиотека date-fns для комфортной работы с датами.
- Moment.js | Docs — Опытная библиотека для работы с датами.
- ISO week date – Wikipedia — Информация о системе международной нумерации недель.