在PHP中处理时区和日期

时间:2011-04-07 19:42:04

标签: php datetime timezone

我正在运行托管在美国服务器上的服务,该服务读取使用本地日期创建的XML Feed - 目前只是英国,但我希望确保该服务适用于所有时区。 我的流程会查看Feed中帖子的日期,并将其与现在的日期/时间进行比较(在美国的服务器上)。 我想出的解决方案是将系统本地化到feed的创建者,然后创建一个时间戳,用它来比较'now':

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 个答案:

答案 0 :(得分:1)

这是我编写的用于进行时区转换的函数。应该是不言自明的:

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);
}

答案 1 :(得分:0)

在对其他人的代码进行更多检查之后,我看到了函数

strtotime($thedate);

比使用mktime更简洁,也允许使用不同的时间格式。