Оптимизированный поиск первого дня недели в 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;
}

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

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

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

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 — Информация о системе международной нумерации недель.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какой метод JavaScript используется для получения дня недели?
1 / 5
Свежие материалы