Мировое время с поддержкой DST и синхронизацией с сервером - PullRequest
3 голосов
/ 24 января 2010

Я хочу включить часы мирового времени JavaScript, такие как http://www.dynamicdrive.com/dynamicindex6/localtime.htm, на свою домашнюю страницу, но я не хочу менять их каждый раз, когда в летнее время меняется часовой пояс. Можно ли автоматически синхронизировать его с официальным сервером времени, чтобы я мог отображать текущее время для разных мест в реальном времени и без каких-либо изменений после перехода на летнее время?

1 Ответ

1 голос
/ 24 января 2010

Используйте стандартную функцию date вместе с date_default_timezone_set.

$timezones = array("Australia/Brisbane", "America/New York", "Europe/London");

foreach ($timezones as $tz) {
    date_default_timezone_set($tz);
    echo "The time in $tz is: " . date('r');
}

Он обрабатывает все летнее время и все для вас.

Список поддерживаемых часовых поясов вы можете найти здесь: http://www.php.net/manual/en/timezones.php


Редактировать: Реализация JavaScript:

  1. Используйте приведенный выше метод, чтобы заставить PHP выводить все интересующие вас часовые пояса, но используйте date('Z'), чтобы получить смещение секунд от UTC. Выведите его, используя JSON или что-то еще, чтобы Javascript мог его использовать:

    var offsets = {
        'Brisbane' : 36000,
        'Sydney'   : 42000,
        'London'   : 0
    };
    
  2. Перебрать их все, добавляя и вычитая смещения по мере необходимости.

    for (var city in offsets) {
        var d = new Date();
        d.setTime(d.getTime() + offsets[city] * 1000);
        alert('The time in ' + city + ' is ' + d.toUTCString());
    }
    
  3. Поместите вышесказанное в функцию, которая вызывается каждую секунду, используя setInterval

Предупреждение: оно не будет гарантировано точным, поскольку теоретически часовой пояс местоположения может измениться, когда у кого-то открыто окно (они могут находиться на границе летнего времени). Это не очень вероятно, и обновление страницы покажет правильное время, так что это, вероятно, не имеет большого значения.

...