В библиотеке Luxon работа с форматированием дат и времени строится
вокруг DateTime, Duration и
Interval. Среди вспомогательных способов преобразования
данных в читаемую форму выделяется метод toHuman,
предназначенный для генерации человеко-читаемого представления временных
значений без необходимости вручную подбирать формат.
toHuman используется для преобразования объектов даты,
времени или длительности в строку, ориентированную на восприятие
человеком. В отличие от строгих форматтеров (toISO,
toFormat), он:
Основная идея метода — выдавать «естественный» текст вместо строго заданного шаблона.
В зависимости от типа объекта поведение метода может отличаться, но концептуально используется единый подход:
value.toHuman(options?)
options — необязательный объект, управляющий
детализацией и стилем вывода.
Наиболее характерный сценарий — работа с длительностями.
import { Duration } from "luxon";
const d = Duration.fromObject({
hours: 2,
minutes: 45,
seconds: 10
});
console.log(d.toHuman());
Результат может быть представлен в виде:
2 hours, 45 minutes, 10 seconds
Метод автоматически:
Одной из ключевых особенностей является поддержка локалей.
const d = Duration.fromObject({
hours: 1,
minutes: 30
});
console.log(d.setLocale("en").toHuman());
console.log(d.setLocale("fr").toHuman());
Пример возможного результата:
1 hour, 30 minutes
1 heure, 30 minutes
Локализация затрагивает:
Метод позволяет контролировать набор отображаемых единиц.
d.toHuman({ unitDisplay: "short" });
Возможные режимы:
long — полные слова (hours,
minutes);short — сокращения (hr,
min);narrow — максимально компактная форма.Пример:
2 hr, 45 min
При необходимости можно ограничить детализацию:
const d = Duration.fromObject({
hours: 5,
minutes: 20,
seconds: 45
});
d.toHuman({ maximumUnitCount: 2 });
Результат:
5 hours, 20 minutes
Оставшиеся единицы отбрасываются, начиная с наименьших.
toHuman автоматически исключает нулевые компоненты:
Duration.fromObject({
hours: 3,
minutes: 0,
seconds: 0
}).toHuman();
Результат:
3 hours
При этом при полностью нулевой длительности поведение зависит от конфигурации и может возвращать:
0 seconds
или локализованный эквивалент.
При работе с интервалами метод применяется к вычисленной длительности:
import { Interval } from "luxon";
const i = Interval.fromDateTimes(
DateTime.local(2026, 1, 1),
DateTime.local(2026, 1, 2, 3)
);
console.log(i.toDuration().toHuman());
Вывод:
1 day, 3 hours
Интервал сначала преобразуется в Duration, после чего
применяется toHuman.
toHuman занимает отдельную нишу между строгим и
автоматическим форматированием.
| Метод | Назначение | Особенность |
|---|---|---|
toFormat |
кастомный формат | полный контроль строки |
toLocaleString |
стандарт локали | системные правила |
toHuman |
человеко-ориентированный вывод | упрощённое представление |
Пример различий:
d.toFormat("h 'hours' m 'minutes'");
d.toLocaleString();
d.toHuman();
toFormat требует ручного шаблона;toLocaleString зависит от стандартов Intl;toHuman автоматически подбирает оптимальную форму.При наличии дробных единиц происходит нормализация:
Duration.fromObject({
hours: 1.5
}).toHuman();
Возможный результат:
1 hour, 30 minutes
Метод автоматически раскладывает дробные значения на эквивалентные компоненты.
Поддерживаются дополнительные параметры:
d.toHuman({
listStyle: "long",
maxDecimalPoints: 1
});
Используется для:
Несмотря на удобство, toHuman имеет особенности:
Типичные области применения:
toHuman часто используется после вычислений:
const start = DateTime.local();
const end = start.plus({ hours: 4, minutes: 30 });
console.log(end.diff(start).toHuman());
Здесь:
diff создаёт Duration;toHuman формирует читаемое представление.Метод логично дополняет цепочки работы с датами и временем, снижая необходимость ручного форматирования.