我有点好奇如何在获取用户时区的同时存储和访问各种事物的“时间点”。time();
用作存储/数据库数据会很酷。
例如,如果我对博客进行更新,它会将标记显示为类似的东西,26/01/2000 11:34
但如果用户的时区比我的时间早一小时,那么它会显示为26/01/2000 12:34
,当然是通过他们的设置确定的。它对于时间限制功能的倒计时也很有用。但是,我不知道如何以这种方式格式化 unix-timestamp。指导和帮助会很棒:)。
我有点好奇如何在获取用户时区的同时存储和访问各种事物的“时间点”。time();
用作存储/数据库数据会很酷。
例如,如果我对博客进行更新,它会将标记显示为类似的东西,26/01/2000 11:34
但如果用户的时区比我的时间早一小时,那么它会显示为26/01/2000 12:34
,当然是通过他们的设置确定的。它对于时间限制功能的倒计时也很有用。但是,我不知道如何以这种方式格式化 unix-timestamp。指导和帮助会很棒:)。
您所有的发布时间和服务器时间都应该是 UTC 开始。从数据库中检索您的发布时间,并以类似于下面的方式使用 DateTime 和 DateTimeZone 类
$fromDatabase = '2008-08-03 14:52:10';
$datetime = new DateTime($fromDatabase);
$timezone = new DateTimeZone('America/Los_Angeles');
$datetime->setTimeZone($timezone);
echo $datetime->format('Y-m-d H:i:s');
或者,在 Linux 上,如果使用 MySQL,您可以加载时区表并调整 MySQL 查询中返回的日期时间。请参阅此页面了解如何开始 - http://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html
请阅读日期的手册页:
我相信这段代码会按照你的要求做:
$time = time();
$today = date("m j, Y, G:i a");
echo $today;
要更改时区,请增加或减少一个小时。由于 unix 时间戳以秒为单位,因此 60 秒 x 60 分钟 = 1 小时或 360 秒。所以加 360 秒向前移动一小时,减去 o 向后移动一小时,如下所示:
$time = time()-360;
很抱歉在这里和另一个时间问题上重新发布我的答案。
这将适用于任何格式为“YYYY-MM-DD HH:MM:SS”的时间(并且可能是“新日期时间”函数可以使用的任何时间。
function changetimefromUTC($time, $timezone) { // SEND YOUR ORIGINAL TIME AND YOUR NEW TIMEZONE
$changetime = new DateTime($time, new DateTimeZone('UTC')); //YOUR ORIGINAL TIME GOES HERE
$changetime->setTimezone(new DateTimeZone($timezone)); // THIS CHANGES TO THE NEW TIMEZONE
return $changetime->format('m/d/y h:i a'); // THIS OUTPUTS THE NEW TIME IN WHATEVER FORMAT YOU WANT
}