Как показать дату в другом часовом поясе
Короткий ответ
Объект даты хранит один момент. Параметр 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Функции из этого ответа
- Date.prototype.toLocaleString — Форматирует дату вместе со временем по правилам языка.
- Intl.DateTimeFormat — Форматирует даты и время по правилам языка.