Метод DateTime.fromHTTP в Luxon предназначен для разбора
HTTP-даты, используемой в заголовках протокола HTTP. Он преобразует
строку в формате HTTP-date (RFC 7231) в объект DateTime,
учитывая особенности временной зоны и стандартов представления времени в
веб-протоколах.
DateTime.fromHTTP(text, options?)
HTTP-даты применяются в заголовках HTTP-ответов и запросов, таких как:
DateExpiresLast-ModifiedIf-Modified-SinceМетод обеспечивает корректный парсинг этих значений в объект Luxon с сохранением точного момента времени.
Ключевая особенность HTTP-формата — фиксированное представление времени в GMT (UTC), независимо от локальной временной зоны клиента или сервера.
HTTP-date соответствует RFC 7231 и всегда выражается в GMT:
Sun, 06 Nov 1994 08:49:37 GMT
Структура:
GMTDateTime.fromHTTP:
DateTime, нормализованный к
внутреннему представлению LuxonDateTime, если строка не
соответствует стандартуimport { DateTime } from "luxon";
const dt = DateTime.fromHTTP("Sun, 06 Nov 1994 08:49:37 GMT");
dt.toISO();
// "1994-11-06T08:49:37.000Z"
HTTP-формат жёстко регламентирован, поэтому метод не допускает вариаций:
Jan,
Feb, Mar и т.д.)GMTЛюбое отклонение приводит к невалидному результату:
const invalid = DateTime.fromHTTP("06 Nov 1994 08:49:37 GMT");
invalid.isValid; // false
Несмотря на указание GMT, Luxon внутренне хранит время в
UTC-подобном формате. Полученный DateTime:
setZoneconst dt = DateTime.fromHTTP("Sun, 06 Nov 1994 08:49:37 GMT");
dt.setZone("Europe/Moscow").toString();
// время будет автоматически пересчитано в +03:00 (или актуальный оффсет)
Любой результат следует проверять через isValid:
const dt = DateTime.fromHTTP("invalid string");
dt.isValid; // false
dt.invalidReason; // "unparsable"
Это важно при обработке HTTP-заголовков, где значение может отсутствовать или быть некорректным.
Оба метода разбирают строковые даты, но предназначены для разных стандартов:
| Метод | Формат |
|---|---|
fromHTTP |
HTTP-date (RFC 7231) |
fromRFC2822 |
RFC 2822 (email/Date headers) |
Пример различий:
DateTime.fromHTTP("Sun, 06 Nov 1994 08:49:37 GMT");
DateTime.fromRFC2822("Sun, 06 Nov 1994 08:49:37 +0000");
Главное отличие — строго фиксированный GMT против
произвольного смещения времени.
Метод часто применяется при работе с:
Expires,
Last-Modified)If-Modified-Since)Пример сравнения времени:
const lastModified = DateTime.fromHTTP("Sun, 06 Nov 1994 08:49:37 GMT");
const now = DateTime.utc();
const isStale = lastModified < now.minus({ days: 30 });
Если строка не соответствует формату:
DateTime с
isValid = falseinvalidReason и
invalidExplanationconst dt = DateTime.fromHTTP("06-11-1994");
dt.isValid; // false
dt.invalidReason; // "unparsable"
HTTP-даты всегда англоязычны и не зависят от локали системы или настроек Intl. Любые локальные различия игнорируются, так как формат стандартизирован на уровне протокола.
После получения объекта DateTime доступны стандартные
операции Luxon:
const dt = DateTime.fromHTTP("Sun, 06 Nov 1994 08:49:37 GMT");
dt.plus({ hours: 2 }).toUTC().toISO();
// "1994-11-06T10:49:37.000Z"
Любые операции выполняются уже над нормализованным моментом времени.
Частые причины невалидного результата:
GMTПосле парсинга Luxon переводит HTTP-дату в:
DateTimeЭто позволяет безопасно использовать значение в арифметике дат и сравнении.