Время смещения в течение DST в одном определенном часовом поясе с помощью JavaScript

Я должен сместить время на час, если это в настоящее время - DST в Зоне тихоокеанского времени. Как я могу определить текущее состояние перехода на летнее время Зоны тихоокеанского времени, независимо от локального часового пояса пользователя?

Вот то, что я имею до сих пор. "dst" в строке 4 является просто заполнителем для функции, которая сказала бы мне, если летнее время активно в той зоне.

function checkTime() {  
    var d = new Date();  
    var hour = d.getUTCHours();  
    var offset = dst ? 7 : 8; // is pacific time currently in daylight savings?

    // is it currently 6 AM, 2 PM, or 10 PM?
    if (hour === ((6 + offset) % 24) || hour === ((14 + offset) % 24) || hour === ((22 + offset) % 24)) {  
      // do stuff
    }
}

checkTime();
7
задан Jimmy Cuadra 7 July 2010 в 01:34
поделиться

2 ответа

Единственный реальный способ узнать наверняка - это иметь информацию о DST (включая любые обновления) на сервере, который можно запросить. На компьютере пользователя даже не обязательно должна быть установлена информация о часовом поясе.

Тогда вам нужен "динамический" сценарий для получения статуса DST.

Возможные методы: Обратиться к странице PHP/ASPX/JSP/CFM/ASP, которая генерирует javascript для установки переменной, указывающей, активен или нет DST, или текущее количество минут смещения.

Напишите сценарий непосредственно на вашей (надеюсь, динамической) странице.

Используйте AJAX/REST/JSON для доступа к службе Date/Time, которая может сообщить вам статус DST или количество минут смещения от UTC для часового пояса/местоположения.

Минуты предпочтительнее часов, потому что смещение DST во всем мире исчисляется минутами, а не часами.

2
ответ дан 7 December 2019 в 16:38
поделиться

Я также боролся с этим раньше на веб-сайте на основе PHP, который должен отображать «мировые часы». В JS нет хорошего способа добиться этого, и даже тогда вы сильно зависите от среды клиента. Вам действительно нужно выполнить эту задачу на языке, который вы используете на стороне сервера.

Если случится так, что вы также используете PHP, то этот фрагмент может оказаться полезным:

function get_offset_with_DST($timezone_name) {
    $default_timezone = date_default_timezone_get();
    date_default_timezone_set($timezone_name);
    $offset_with_DST = date('Z') / 3600;
    date_default_timezone_set($default_timezone);
    return $offset_with_DST;
}

, а затем в JS:

<script>var offsetWithDST = <?= get_offset_with_DST('US/Pacific'); ?>;</script>

Список всех поддерживаемых имен часовых поясов в PHP см. здесь страница .

1
ответ дан 7 December 2019 в 16:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: