Тема часовых поясов в отношении веб-страниц поднимается очень редко. Иногда все же приходится вычислять часовые пояса в JavaScript.
Как правило, на странице можно получить текущее время пользователя, которое может быть преобразовано в «универсальное координированное время». Но это время может быть как «зимним», так и «летним » (с поправкой на 1 час). Чтобы проверить, нужно ли использовать поправку или нет, сделаем сравнения часовых поясов для данного региона зимой и летом. В качестве тестовых точек возьмем даты «1 февраля» и «1 августа».
var s,
now = new Date(),
nowTZ = now.getTimezoneOffset(),
winterTZ = new Date(now.getFullYear(), 1, 1).getTimezoneOffset(),
summerTZ = new Date(now.getFullYear(), 7, 1).getTimezoneOffset();
if (winterTZ === summerTZ) {
s = 'no daylight saving';
} else {
if (nowTZ === winterTZ) {
s = 'winter time';
} else if (nowTZ === summerTZ) {
s = 'summer time';
} else {
throw new Error('Unknown time zone');
}
}
В некоторых странах (например, Япония, Китай, большая часть Африки и Южной Америки) перевод на «летнее время» не используется и это можно определить, если часовой пояс зимой и летом не будет отличаться. Если переход на «летнее время» все-таки используется, то проверяем, какой часовой пояс сейчас используется – летний или зимний.
Обновление от 31 октября 2011 года : В России с 5 августа 2011 года вступил в силу «Закон об исчислении времени», отменяющий сезонный перевод часов. Печальной новостью стало то, что в Windows (начиная с XP и заканчивая 7 со всеми последними обновлениями) часовые пояса для дат в прошлом определяются не верно. В браузерах, запущенных нa OSX или Linux, такой проблемы с часовыми поясами для дат в прошлом не возникает.