День недели

В библиотеке Luxon день недели извлекается через свойство weekday. Оно возвращает номер дня в формате ISO-8601:

День Значение
Понедельник 1
Вторник 2
Среда 3
Четверг 4
Пятница 5
Суббота 6
Воскресенье 7
import { DateTime } from "luxon";

const date = DateTime.now();

console.log(date.weekday);

Пример результата:

5

Важно учитывать, что в Luxon неделя начинается с понедельника, а не с воскресенья, как во встроенном объекте Date в JavaScript.


Текстовое представление дня недели

Для получения полного названия дня используется свойство weekdayLong.

const date = DateTime.now();

console.log(date.weekdayLong);

Результат:

Friday

Краткое название:

console.log(date.weekdayShort);

Результат:

Fri

Минимальное сокращение:

console.log(date.weekdayNarrow);

Результат:

F

Локализация названий дней недели

Luxon поддерживает локализацию через метод setLocale().

const date = DateTime.now().setLocale("ru");

console.log(date.weekdayLong);

Результат:

пятница

Короткий вариант:

console.log(date.weekdayShort);

Результат:

пт

Пример с другими языками:

DateTime.now()
  .setLocale("fr")
  .weekdayLong;

Результат:

vendredi

Получение дня недели для конкретной даты

const date = DateTime.fromISO("2025-12-31");

console.log(date.weekdayLong);

Результат:

Wednesday

Форматирование через toFormat

Метод toFormat() позволяет гибко выводить день недели.

Полное название

date.toFormat("cccc");

Результат:

Wednesday

Краткое название

date.toFormat("ccc");

Результат:

Wed

Минимальное сокращение

date.toFormat("ccccc");

Результат:

W

Числовой день недели через форматирование

date.toFormat("c");

Результат:

3

Значения также соответствуют ISO-формату:

1 weekday


Проверка дня недели

Проверка на выходной

const date = DateTime.now();

const isWeekend = date.weekday === 6 || date.weekday === 7;

console.log(isWeekend);

Проверка на будний день

const isWorkday = date.weekday >= 1 && date.weekday <= 5;

console.log(isWorkday);

Использование switch

switch (date.weekday) {
  case 1:
    console.log("Понедельник");
    break;

  case 2:
    console.log("Вторник");
    break;

  case 3:
    console.log("Среда");
    break;

  case 4:
    console.log("Четверг");
    break;

  case 5:
    console.log("Пятница");
    break;

  case 6:
  case 7:
    console.log("Выходной");
    break;
}

Сравнение дней недели

const first = DateTime.fromISO("2025-05-01");
const second = DateTime.fromISO("2025-05-08");

console.log(first.weekday === second.weekday);

Результат:

true

Получение ближайшего понедельника

const now = DateTime.now();

const nextMonday = now.plus({
  days: 8 - now.weekday
});

console.log(nextMonday.toISODate());

Получение предыдущего воскресенья

const now = DateTime.now();

const previousSunday = now.minus({
  days: now.weekday % 7
});

console.log(previousSunday.toISODate());

Начало и конец недели

Начало недели

const start = DateTime.now().startOf("week");

console.log(start.toString());

Конец недели

const end = DateTime.now().endOf("week");

console.log(end.toString());

В Luxon неделя всегда начинается с понедельника.


Перебор дней недели

const start = DateTime.now().startOf("week");

for (let i = 0; i < 7; i++) {
  const day = start.plus({ days: i });

  console.log(day.weekdayLong);
}

Массив дней недели

const days = [];

const start = DateTime.now().startOf("week");

for (let i = 0; i < 7; i++) {
  days.push(
    start.plus({ days: i }).weekdayLong
  );
}

console.log(days);

Определение количества рабочих дней

function countWorkdays(start, end) {
  let current = start;
  let count = 0;

  while (current <= end) {
    if (current.weekday <= 5) {
      count++;
    }

    current = current.plus({ days: 1 });
  }

  return count;
}

const start = DateTime.fromISO("2025-05-01");
const end = DateTime.fromISO("2025-05-31");

console.log(
  countWorkdays(start, end)
);

Фильтрация выходных дней

const dates = [
  DateTime.fromISO("2025-05-01"),
  DateTime.fromISO("2025-05-02"),
  DateTime.fromISO("2025-05-03"),
  DateTime.fromISO("2025-05-04")
];

const weekends = dates.filter(date => {
  return date.weekday >= 6;
});

console.log(weekends);

Создание расписания по дням недели

const lessons = {
  1: "Математика",
  2: "Физика",
  3: "Информатика",
  4: "История",
  5: "Биология"
};

const today = DateTime.now();

console.log(
  lessons[today.weekday]
);

Преобразование дня недели в текст вручную

const names = {
  1: "Понедельник",
  2: "Вторник",
  3: "Среда",
  4: "Четверг",
  5: "Пятница",
  6: "Суббота",
  7: "Воскресенье"
};

const date = DateTime.now();

console.log(
  names[date.weekday]
);

Работа с часовыми поясами

День недели зависит от часового пояса.

const moscow = DateTime
  .now()
  .setZone("Europe/Moscow");

const tokyo = DateTime
  .now()
  .setZone("Asia/Tokyo");

console.log(moscow.weekdayLong);
console.log(tokyo.weekdayLong);

Из-за разницы во времени в разных зонах день недели может отличаться.


Получение дня недели из Unix Timestamp

const timestamp = 1746700000;

const date = DateTime.fromSeconds(timestamp);

console.log(date.weekdayLong);

Использование Info.weekdays

Luxon предоставляет встроенный список названий дней недели.

import { Info } from "luxon";

console.log(
  Info.weekdays()
);

Результат:

[
  "Monday",
  "Tuesday",
  "Wednesday",
  "Thursday",
  "Friday",
  "Saturday",
  "Sunday"
]

Локализованный список дней недели

console.log(
  Info.weekdays("long", {
    locale: "ru"
  })
);

Результат:

[
  "понедельник",
  "вторник",
  "среда",
  "четверг",
  "пятница",
  "суббота",
  "воскресенье"
]

Короткие названия дней

Info.weekdays("short");

Результат:

[
  "Mon",
  "Tue",
  "Wed",
  "Thu",
  "Fri",
  "Sat",
  "Sun"
]

Минимальные сокращения

Info.weekdays("narrow");

Результат:

[
  "M",
  "T",
  "W",
  "T",
  "F",
  "S",
  "S"
]

Получение номера недели и дня недели одновременно

const date = DateTime.now();

console.log(date.weekNumber);
console.log(date.weekday);

ISO-неделя

Luxon полностью ориентирован на ISO-8601 при работе с неделями.

Основные правила:

  • неделя начинается с понедельника;
  • воскресенье имеет номер 7;
  • первая неделя года содержит первый четверг года.

Отличия от стандартного Date

Встроенный JavaScript Date использует метод getDay():

День Date.getDay() Luxon.weekday
Воскресенье 0 7
Понедельник 1 1
Суббота 6 6

Пример:

const native = new Date();

console.log(native.getDay());

const luxon = DateTime.now();

console.log(luxon.weekday);

Частые ошибки

Путаница между 0 и 7

Во встроенном JavaScript воскресенье равно 0, а в Luxon — 7.

Неверно:

if (date.weekday === 0)

Правильно:

if (date.weekday === 7)

Неправильная локализация

Неверно:

DateTime.now().weekdayLong;

Ожидание русского языка без установки локали приведёт к английскому результату.

Правильно:

DateTime.now()
  .setLocale("ru")
  .weekdayLong;

Игнорирование часового пояса

DateTime.now().weekday

и

DateTime.now()
  .setZone("Asia/Tokyo")
  .weekday

могут возвращать разные значения.


Практический пример календаря

const start = DateTime
  .fromISO("2025-05-01")
  .startOf("week");

for (let i = 0; i < 14; i++) {
  const day = start.plus({ days: i });

  console.log(
    `${day.toISODate()} — ${day.weekdayLong}`
  );
}

Практический пример проверки рабочего времени

function isOfficeOpen(date) {
  const isWeekend =
    date.weekday === 6 ||
    date.weekday === 7;

  if (isWeekend) {
    return false;
  }

  return date.hour >= 9 &&
         date.hour < 18;
}

const now = DateTime.now();

console.log(
  isOfficeOpen(now)
);

Практический пример расписания задач

const tasks = {
  1: ["Планирование"],
  2: ["Разработка"],
  3: ["Тестирование"],
  4: ["Документация"],
  5: ["Релиз"]
};

const today = DateTime.now();

console.log(
  tasks[today.weekday] || []
);