How To: Проверить используется летнее время или нет

Тема часовых поясов в отношении веб-страниц поднимается очень редко. Иногда все же приходится вычислять часовые пояса в 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, такой проблемы с часовыми поясами для дат в прошлом не возникает.