Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как показать дату в другом часовом поясе

Короткий ответ

Объект даты хранит один момент. Параметр timeZone показывает этот момент так, как его видят часы в нужном городе:

const moment = new Date(Date.UTC(2025, 5, 1, 12, 0));
 
console.log(moment.toLocaleString('en-GB', { timeZone: 'Asia/Tokyo' }));

Результат:

01/06/2025, 21:00:00

Несколько городов

Intl.DateTimeFormat удобен для многократного форматирования:

const moment = new Date(Date.UTC(2025, 5, 1, 12, 0));
const cities = ['Europe/London', 'Europe/Berlin', 'America/New_York'];
 
for (const timeZone of cities) {
  const time = new Intl.DateTimeFormat('en-GB', { timeZone, hour: '2-digit', minute: '2-digit' }).format(moment);
  console.log(timeZone, time);
}

Результат:

Europe/London 13:00
Europe/Berlin 14:00
America/New_York 08:00

Часовой пояс пользователя

resolvedOptions() сообщает, какой часовой пояс использует браузер:

const zone = Intl.DateTimeFormat().resolvedOptions().timeZone;
 
console.log(typeof zone);

Результат:

string

Частая ошибка

Прибавлять часы к дате вручную, чтобы сменить часовой пояс, — ошибка: это ломается при переходе на летнее время. Форматируйте через timeZone, а сам момент не меняйте.

const moment = new Date(Date.UTC(2025, 2, 30, 12, 0));
 
console.log(moment.toLocaleString('en-GB', { timeZone: 'Europe/Berlin' }));

Результат:

30/03/2025, 14:00:00

Функции из этого ответа

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.