我使用SQL中的简单时间戳在服务器上存储时间戳。当我拉下该时间戳时,我通过以下函数运行它以格式化时间。
我如何添加到以下函数,以便将$timestamp转换为用户正在查询的任何时区?
// Returns the formatted time
function displayDate($timestamp)
{
$secAgo = time() - $timestamp;
// 1 day
if ($secAgo < 86400)
return date('h:i:A', $timestamp);
// 1 week
if ($secAgo < (86400 * 7))
return date('l', $timestamp);
// older than 1 week
return date('m/t/y', $timestamp);
}
如果要更改时区名称,可以使用如下命令:
$date = new DateTime(date('Y-m-d H:i:s', $timestamp), new DateTimeZone('UTC'));
$date->setTimezone(new DateTimeZone('Asia/Vladivostok'));
return $date->format('m/t/y');
其中Asia/Vladivostok
为用户自定义时区
@zerkms的方法是将时间戳转换为任何时区的最佳方法。
但是,如果每次需要显示时间时都这样做,则可能会对性能造成重大影响,因为每次都要设置和删除时区对象。如果页面上的所有时间戳都在同一时区,那么有一个方便的快捷方式。(这通常是情况,因为用户不会在HTTP请求中间更改时区。)
在函数外的某处执行:
date_default_timezone_set('America/New_York'); // or any other timezone
将此绑定到会话管理函数中可能是一个好主意,以便相同的用户始终获得相同的时区。
一旦您这样做,date()
将自动开始使用正确的时区,假设$timestamp
表示Unix时间戳。它还会自动校正夏令时。因此,不需要在该函数中更改任何内容。
使用timezone_identifiers_list()获取一个有效的时区列表