🧱 Суть

toISOString() и Intl.DateTimeFormat решают разные задачи форматирования даты.

  • toISOString() – для стабильного машинного формата.
  • Intl.DateTimeFormat – для отображения даты пользователю.

📦 Проблема

1. Непонятно, какой способ выбрать

Оба возвращают строку с датой, но предназначены для разных сценариев.

2. Неподходящий формат для пользователя

Дата вида:

2025-04-22

удобна для кода, но не всегда для интерфейса.

✅ Решение

Использовать форматирование в зависимости от задачи.

💻 Код

toISOString()

Получение даты в формате ISO:

const date = new Date(item.dt * 1000)
  .toISOString()
  .split('T')[0];

Что происходит:

  1. new Date(...) – создаёт объект даты.
  2. toISOString() – преобразует в строку ISO.
  3. split('T')[0] – оставляет только дату.

Результат:

2025-04-22

Можно вынести в функцию:

export const formatDate = (unixTimestamp: number): string => {
  return new Date(unixTimestamp * 1000)
    .toISOString()
    .split('T')[0];
};

Intl.DateTimeFormat

Форматирование с учётом локали:

export const formatDate = (unixTimestamp: number): string => {
  return new Intl.DateTimeFormat('ru-RU').format(
    new Date(unixTimestamp * 1000)
  );
};

Результат для ru-RU:

22.04.2025

Для en-US:

4/22/2025

🎯 Вывод

ВариантРезультатКогда использовать
toISOString().split('T')[0]2025-04-22Для логики, хранения, API, сравнения дат
Intl.DateTimeFormat22.04.2025, 4/22/2025Для отображения пользователю
  • toISOString() – машинный формат.
  • Intl.DateTimeFormat – пользовательский формат с учётом локали.

🔗 Связано