2

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

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”。

有任何想法吗?

4

1 回答 1

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()(您将获得一个包含每个已知时间的偏移量的数组,请参阅http://de3.php.net上的示例/manual/en/datetimezone.gettransitions.php)和getOffset()(需要偏移量的时间,请参阅http://de3.php.net/manual/en/datetimezone.getoffset.php)。

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

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

于 2012-10-09T23:00:17.727 回答