服务器时间/日期动态偏移

时间:2012-10-09 22:53:51

标签: php date timezone local

我正在尝试弄清楚如何调整下面的代码以抵消任何用户的时区。

function now($format = 'Y-m-d H:i:s'){
    return @date($format,mktime());
}

我使用下面这个来调整当地时间

function now($format = 'Y-m-d H:i:s'){
    return @date($format,mktime() -3600);
}

但我需要动态调整它给用户。

编辑:我让用户通过表单中的下拉列表定义他们的时区,将其保存到数据库,例如“America / Los_Angeles”。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

使用PHP提供的DateTime对象可能是一个非常好的主意。它承诺也会处理时区:

// Current date/time in the specified time zone.
$date = new DateTime(null, new DateTimeZone('Pacific/Nauru'));
echo $date->format('Y-m-d H:i:sP') . "\n";

(文档页面http://de3.php.net/manual/en/datetime.construct.php中的代码)

要获取有关所选时区的任何信息,DateTimeZone可以通过getTransitions()等方法访问timezon数据库信息(您将获得每次知道偏移的数组,请参阅{上的示例{3}})和getOffset()(需要偏移的时间,请参阅http://de3.php.net/manual/en/datetimezone.gettransitions.php)。

所以基本上没有“以秒为单位的偏移量”之类的东西,因为这个值会根据a)你要求的时间而改变,因为夏令时之类的东西会随着时间的推移而影响它,以及b)时间你问的是,因为时区的任何变化都受到当地立法的影响,而不是不可改变的自然法。

您正在以正确的方式存储可在必要时转换为本地时间的通用时间,但我建议您不要自己尝试,而是要利用PHP提供的功能。它会减少您编写代码的时间。