RFC 2822 — формат представления даты и времени, широко используемый в
электронных письмах и HTTP-заголовках. В Luxon преобразование объекта
DateTime в строку этого формата выполняется методом
toRFC2822(). Результат всегда соответствует спецификации и
включает день недели, число месяца, сокращённое название месяца, год,
время и смещение часового пояса.
Строка формируется по шаблону:
Day, DD Mon YYYY HH:mm:ss ±ZZZZ
Пример:
Mon, 05 Feb 2024 14:30:00 +0300
Ключевые элементы:
Метод вызывается у экземпляра DateTime и возвращает
строку без дополнительных параметров.
import { DateTime } from "luxon";
const dt = DateTime.local(2024, 2, 5, 14, 30);
const rfc = dt.toRFC2822();
console.log(rfc);
Результат зависит от локальной временной зоны окружения:
Mon, 05 Feb 2024 14:30:00 +0300
Luxon учитывает текущую временную зону объекта DateTime.
Это означает, что один и тот же момент времени может быть представлен с
разными смещениями.
const dt1 = DateTime.fromISO("2024-02-05T14:30:00", { zone: "utc" });
const dt2 = dt1.setZone("Europe/Moscow");
console.log(dt1.toRFC2822());
console.log(dt2.toRFC2822());
Вывод:
Mon, 05 Feb 2024 14:30:00 +0000
Mon, 05 Feb 2024 17:30:00 +0300
Формат сохраняет реальное локальное время относительно указанной зоны.
Метод toRFC2822() не является универсальным форматом
сериализации. Его поведение отличается от других методов Luxon:
toISO() — машинно-ориентированный формат ISO 8601,
используемый в API и базах данныхtoHTTP() — формат HTTP-заголовков, похожий, но всегда в
UTCtoRFC2822() — человекочитаемый формат для почтовых
систем и некоторых сетевых протоколовconst dt = DateTime.local(2024, 2, 5, 14, 30);
dt.toISO();
dt.toHTTP();
dt.toRFC2822();
Разница заключается не только в формате строки, но и в том, как учитывается временная зона.
Метод строго следует спецификации RFC 2822:
±HHMM, без двоеточийДаже при изменении локали Luxon не изменяет язык вывода:
const dt = DateTime.local(2024, 2, 5).setLocale("ru");
console.log(dt.toRFC2822());
Результат остаётся англоязычным:
Mon, 05 Feb 2024 00:00:00 +0300
При переводе времени в UTC формат корректно обновляет смещение:
const dt = DateTime.local(2024, 2, 5, 14, 30).toUTC();
console.log(dt.toRFC2822());
Вывод:
Mon, 05 Feb 2024 14:30:00 +0000
Это важно при формировании заголовков для сетевых протоколов, где требуется единая временная база.
При работе с некорректными или частично заданными датами поведение
зависит от состояния объекта DateTime:
"Invalid DateTime"const dt = DateTime.fromObject({ year: 2024, month: 2 });
console.log(dt.toRFC2822());
Если не хватает компонентов времени, Luxon подставляет стандартные значения (00:00:00).
Без Luxon RFC 2822 приходится собирать вручную:
const date = new Date();
const result =
date.toUTCString().replace("GMT", "+0000");
Такой подход требует дополнительной обработки и не гарантирует
полного соответствия спецификации. Luxon решает это напрямую через
toRFC2822().
Метод не изменяет исходный объект DateTime. Он всегда
возвращает новую строку, оставляя экземпляр неизменным.
const dt = DateTime.local(2024, 2, 5);
const formatted = dt.toRFC2822();
console.log(dt.isValid); // true
console.log(typeof formatted); // string
Формат RFC 2822 применяется в:
Строгое соответствие формату важно для совместимости между системами, где парсинг выполняется по фиксированному шаблону.