12/24-часовой формат

Библиотека Luxon использует объект DateTime для представления даты и времени. Одной из важнейших задач при работе со временем является корректное форматирование часов в 12-часовом и 24-часовом представлении.

Luxon поддерживает:

  • стандартные токены форматирования;
  • локализацию;
  • автоматическое переключение между форматами;
  • вывод времени с AM/PM;
  • региональные настройки.

24-часовой формат

24-часовой формат отображает часы в диапазоне от 00 до 23.

Пример:

13:45
23:10
08:05

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

import { DateTime } from "luxon";

const dt = DateTime.now();

console.log(dt.toFormat("HH:mm"));

Возможный результат:

21:34

Токен HH

Токен:

HH

означает:

  • часы в 24-часовом формате;
  • всегда 2 цифры;
  • диапазон 00–23.

Примеры:

Время Результат
5 утра 05
14 часов 14
23 часа 23

12-часовой формат

12-часовой формат использует диапазон:

1–12

и требует дополнительного индикатора:

AM / PM

Пример:

09:15 AM
07:40 PM

Форматирование

const dt = DateTime.now();

console.log(dt.toFormat("hh:mm a"));

Результат:

09:42 PM

Токены 12/24-часового времени

Токен Значение
H часы 24ч без ведущего нуля
HH часы 24ч с ведущим нулём
h часы 12ч без ведущего нуля
hh часы 12ч с ведущим нулём
a AM/PM

Разница между H и HH

H

dt.toFormat("H:mm");

Результат:

5:07
14:07

HH

dt.toFormat("HH:mm");

Результат:

05:07
14:07

Разница между h и hh

h

dt.toFormat("h:mm a");

Результат:

3:20 PM

hh

dt.toFormat("hh:mm a");

Результат:

03:20 PM

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

Токен:

a

добавляет индикатор половины суток.

Пример:

const dt = DateTime.fromObject({
  hour: 18,
  minute: 30
});

console.log(dt.toFormat("hh:mm a"));

Результат:

06:30 PM

Полуночь и полдень

Полночь

00:00

в 12-часовом формате:

12:00 AM

Полдень

12:00

в 12-часовом формате:

12:00 PM

Пример:

DateTime.fromObject({ hour: 0 }).toFormat("hh a");

Результат:

12 AM

Создание времени вручную

24-часовой ввод

const dt = DateTime.fromObject({
  hour: 22,
  minute: 15
});

console.log(dt.toFormat("HH:mm"));

Результат:

22:15

Отображение в 12-часовом формате

console.log(dt.toFormat("hh:mm a"));

Результат:

10:15 PM

Локализация времени

Формат времени зависит от локали.

Например:

  • США обычно используют 12-часовой формат;
  • Европа — 24-часовой.

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

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

Американский формат

const dt = DateTime.now().setLocale("en-US");

console.log(dt.toLocaleString(DateTime.TIME_SIMPLE));

Результат:

8:30 PM

Европейский формат

const dt = DateTime.now().setLocale("de");

console.log(dt.toLocaleString(DateTime.TIME_SIMPLE));

Результат:

20:30

Предустановленные форматы времени

Константа Пример
TIME_SIMPLE 10:30 PM
TIME_WITH_SECONDS 10:30:15 PM
TIME_24_SIMPLE 22:30
TIME_24_WITH_SECONDS 22:30:15

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

console.log(
  dt.toLocaleString(DateTime.TIME_24_SIMPLE)
);

Результат:

21:44

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

console.log(
  dt.toLocaleString(DateTime.TIME_SIMPLE)
);

Результат:

9:44 PM

Секунды в формате времени

24-часовой формат

dt.toFormat("HH:mm:ss");

Результат:

18:25:42

12-часовой формат

dt.toFormat("hh:mm:ss a");

Результат:

06:25:42 PM

Миллисекунды

Токен:

SSS

означает миллисекунды.

Пример:

dt.toFormat("HH:mm:ss.SSS");

Результат:

14:22:18.431

Комбинирование даты и времени

24-часовой формат

dt.toFormat("dd.MM.yyyy HH:mm");

Результат:

24.05.2026 18:45

12-часовой формат

dt.toFormat("dd.MM.yyyy hh:mm a");

Результат:

24.05.2026 06:45 PM

ISO-формат времени

ISO всегда использует 24-часовое представление.

Пример:

console.log(dt.toISO());

Результат:

2026-05-24T18:30:45.000+03:00

Форматирование времени в UTC

const utc = DateTime.utc();

console.log(utc.toFormat("HH:mm"));

Результат:

16:20

Часовые пояса и формат времени

const ny = DateTime.now().setZone("America/New_York");

console.log(ny.toFormat("hh:mm a"));

Результат:

09:15 AM

Одно и то же время в разных форматах

const dt = DateTime.fromObject({
  hour: 21,
  minute: 10
});

console.log(dt.toFormat("HH:mm"));
console.log(dt.toFormat("hh:mm a"));

Результат:

21:10
09:10 PM

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

Пользователь вводит 24-часовой формат

const dt = DateTime.fromFormat(
  "23:15",
  "HH:mm"
);

console.log(dt.toFormat("hh:mm a"));

Результат:

11:15 PM

Парсинг 12-часового времени

const dt = DateTime.fromFormat(
  "11:20 PM",
  "hh:mm a"
);

console.log(dt.toFormat("HH:mm"));

Результат:

23:20

Типичные ошибки

Отсутствие a в 12-часовом формате

Ошибка:

dt.toFormat("hh:mm");

Результат:

08:30

Невозможно определить:

  • утро;
  • вечер.

Правильно:

dt.toFormat("hh:mm a");

Использование HH вместе с a

Некорректно:

dt.toFormat("HH:mm a");

Результат:

18:30 PM

Токены конфликтуют:

  • HH уже использует 24-часовой формат;
  • a предназначен только для 12-часового.

Проверка формата через локаль

const us = dt.setLocale("en-US");
const fr = dt.setLocale("fr");

console.log(us.toLocaleString(DateTime.TIME_SIMPLE));
console.log(fr.toLocaleString(DateTime.TIME_SIMPLE));

Результат:

8:45 PM
20:45

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

Метод позволяет получить части времени отдельно.

const parts = dt.toLocaleParts({
  hour: "numeric",
  minute: "2-digit"
});

console.log(parts);

Результат:

[
  { type: 'hour', value: '8' },
  { type: 'literal', value: ':' },
  { type: 'minute', value: '30' }
]

Формат времени для интерфейсов

Цифровые часы

dt.toFormat("HH:mm:ss");

Мобильные интерфейсы США

dt.toFormat("h:mm a");

Системные журналы

dt.toFormat("yyyy-MM-dd HH:mm:ss");

Таймеры

dt.toFormat("mm:ss");

Практический пример переключения формата

function formatTime(dt, use12Hour) {
  return use12Hour
    ? dt.toFormat("hh:mm a")
    : dt.toFormat("HH:mm");
}

const dt = DateTime.now();

console.log(formatTime(dt, true));
console.log(formatTime(dt, false));

Сравнение форматов

Формат Пример Особенности
HH:mm 21:30 24-часовой
H:mm 9:30 без ведущего нуля
hh:mm a 09:30 PM 12-часовой
h:mm a 9:30 PM компактный вид

Рекомендации по использованию

Когда использовать 24-часовой формат

Подходит для:

  • серверов;
  • логов;
  • API;
  • административных панелей;
  • международных систем.

Пример:

2026-05-24 21:45:10

Когда использовать 12-часовой формат

Подходит для:

  • пользовательских интерфейсов США;
  • мобильных приложений;
  • бытовых приложений;
  • календарей.

Пример:

9:45 PM

Краткая памятка

Задача Формат
24 часа HH:mm
12 часов hh:mm a
Секунды HH:mm:ss
Миллисекунды HH:mm:ss.SSS
ISO toISO()
Локализованный вывод toLocaleString()
Парсинг 24ч fromFormat(..., "HH:mm")
Парсинг 12ч fromFormat(..., "hh:mm a")