Оптимизированный поиск первого дня недели в JavaScript

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для определения начала недели в JavaScript, используйте объект Date:

JS
Скопировать код
const today = new Date();
const firstDayOfWeek = new Date(today.setDate(today.getDate() – today.getDay()));

Этот код возвращает прошлое воскресенье. Если вам надо определить понедельник, используйте следующий код:

JS
Скопировать код
const today = new Date();
const adjustDay = today.getDay() === 0 ? 6 : today.getDay() – 1;
const firstDayOfWeek = new Date(today.setDate(today.getDate() – adjustDay));

Мы модифицируем значение, возвращаемое методом today.getDay(), чтобы задать желаемый день недели как начальный.

Кинга Идем в IT: пошаговый план для смены профессии

Настройка начала вашей недели

Ваша неделя может начинаться с любого дня, который вы определите.

Выбирайте начальный день вашей недели

Для настройки начального дня недели согласно вашим предпочтениям:

JS
Скопировать код
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;
}

// Теперь можно установить любой день недели как начальный, передав его номер

Учет различных часовых поясов

Для учета различных часовых поясов:

JS
Скопировать код
const dateInUTC = new Date().toISOString();

Расширенные возможности с помощью библиотек

Для упрощения работы используйте библиотеку Date.js:

JS
Скопировать код
Date.today().previous().monday();

Посетите Date.js, чтобы открыть для себя новые возможности работы с датами.

Производительность при работе с MongoDB

Стремитесь к оптимизации при использовании JavaScript в map-функциях MongoDB.

Оптимизация в MongoDB

Нужно найти баланс между экономией на создании объектов и точностью расчета дат:

JS
Скопировать код
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.

Визуализация

На примере покажем, как определить начальный день недели:

Markdown
Скопировать код
📅 Текущая дата: [🌲, 🌲, 🌲, 🎪, 🌲, 🌲, 🌲]

Устанавливаем начальный день:

JS
Скопировать код
let today = new Date();
let firstDayOfWeek = new Date(today.setDate(today.getDate() – today.getDay()));

Теперь видим, какой день отмечен как начало недели:

Markdown
Скопировать код
📅 Начальный день: [🎪, ⛺, ⛺, ⛺, ⛺, ⛺, ⛺]

Начальный день недели обозначен символом первой палатки (🎪). Это ваш старт недели.

Работа с различными случаями в коде

Будьте готовы к выполнению сложных манипуляций и обработке крайних случаев.

Учёт високосного года

Не забывайте учитывать високосный год:

JS
Скопировать код
const year = new Date().getFullYear();
const isLeap = new Date(year, 1, 29).getMonth() === 1;

Учет перехода на летнее время

Переход на летнее время может представить сложности:

JS
Скопировать код
const date = new Date();
const currentOffset = date.getTimezoneOffset();

Переиспользование и читабельность кода

Очень важно писать легко читаемый и легко воспроизводимый код. В этом важный секрет эффективной работы в команде.

Полезные материалы

  1. Date.prototype.getDay() – JavaScript | MDN — Информация о методе получения дня недели.
  2. JavaScript – get the first day of the week from current date — Обсуждение способов определения начального дня недели.
  3. Date.prototype.setDate() – JavaScript | MDN — Детализация метода setDate для работы с датами.
  4. date-fns – современная JavaScript-библиотека для работы с датами — Библиотека date-fns для комфортной работы с датами.
  5. Moment.js | Docs — Опытная библиотека для работы с датами.
  6. ISO week date – Wikipedia — Информация о системе международной нумерации недель.