Работа с часовыми поясами и датами в PHP - PullRequest
0 голосов
/ 07 апреля 2011

Я использую службу, размещенную на сервере в США, который читает XML-ленту, созданную с локальной датой - в настоящее время это только Великобритания, но я хочу убедиться, что служба работает со всеми часовыми поясами.Мой процесс просматривает дату публикации в ленте и сравнивает ее с датой / временем прямо сейчас (на сервере в США).Решение, которое я придумала, локализует систему для инициатора канала, а затем создает временную метку, с которой можно сравнить «сейчас» с:

protected function datemath($thedate){

    $currenttimezone = date_default_timezone_get();
    date_default_timezone_set($this->feedtimezone);
    $thedate = mktime substr($thedate,11,2),substr($thedate,14,2),
    substr($thedate,17,2),substr($thedate,3,2),substr($thedate,0,2),
    substr($thedate,6,4));
    date_default_timezone_set($currenttimezone);
    return $thedate;

    }

У меня такой вопрос ... Это разумный способ?решения этой проблемы или есть лучший, более стандартизированный способ, который я действительно должен знать?

Ответы [ 2 ]

1 голос
/ 07 апреля 2011

Вот функция, которую я написал для преобразования часовых поясов. Должно быть довольно понятно:

function switch_timezone($format, $time = null, 
    $to = "America/Los_Angeles", $from = "America/Los_Angeles")
{
    if ($time == null) $time = time();

    $from_tz = new DateTimeZone($from);
    $to_tz = new DateTimeZone($to);

    if (is_int($time)) $time = '@' . $time;

    $dt = date_create($time, $from_tz);

    if ($dt)
    {
        $dt->setTimezone($to_tz);
        return $dt->format($format);
    }

    return date($format, $time);
}
0 голосов
/ 09 апреля 2011

После немного большей проверки кода других людей я вижу, что функция

strtotime($thedate);

немного более краткая, чем использование mktime, а также позволяет использовать разные форматы времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...