根据这个计算器,这个日期应该是 Mon Apr 01 2013 13:11:57 GMT+0200。但相反,它是服务器时间:2013-04-01 07:11:57。我知道这是一个时区问题(服务器在-4),但是有没有办法让这个时区独立,或者我必须从数据库中查询用户的时区?
$date = 1364814717;
$date = date('Y-m-d H:i:s', $date);
您可以像这样更改默认时区:
date_default_timezone_set('UTC');
如果您需要为每个用户设置不同的数字,您始终可以发送未转换的数字并使用 javascript(请参阅 getTimezoneOffset),但让用户选择可能会更好(他们的计算机可能不知道它到底在哪里!)
我希望这就是你要找的。
var myDate = new Date();
document.write(myDate.getTimezoneOffset());
您将需要询问用户在哪里并将其存储在数据库中的配置文件中。你实际上不能依赖任何东西。因为用户可以在代理后面,看起来就像在上海,但实际上在墨尔本。
例如,用户说它在GMT +1
. 您将选项列表放在用户的配置文件中,当用户保存它时,它将被写入名为 (for example) 的数据库行timezone
。
尝试使用较新的DateTime
样式(来自 ID 7 的用户的示例);
PHP
$mysqli = new mysqli("localhost", "my_user", "my_password", "database_name");
if ($result = $mysqli->query("SELECT timezone FROM users where user_id = 7")) {
$prefix = '';
if ($result[0]->timezone >= 0) {
$prefix = '+';
}
$date = new DateTime('NOW GMT'.$prefix.$result[0]->timezone);
echo '<pre>';
print_r($date);
echo '</pre>';
}
else {
echo 'Query failed';
}
这里发生的是您只保存 GMT 偏移量(或使用您想要的任何时间设置)并根据用户的偏好返回当前时间。
输出
DateTime Object (
[date] => 2013-04-01 13:50:08
[timezone_type] => 1
[timezone] => +01:00
)
别忘了看看夏天;)
祝你好运!