我使用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);
}
答案 0 :(得分:3)
如果要更改时区名称,可以使用以下内容:
$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
是用户的自定义时区。
答案 1 :(得分:1)
@ zerkms的方法是将时间戳转换为任何时区的最佳方法。
但是如果你每次需要显示一个时间时都这样做,那么它可能会有很大的性能损失,因为你每次都在设置和拆除时区对象。如果页面上的所有时间戳都在同一时区,则有一个方便的快捷方式。 (通常情况是这样,因为用户不会在HTTP请求中间更改时区。)
在函数之外的某处,执行:
date_default_timezone_set('America/New_York'); // or any other timezone
将其与您的会话管理功能联系起来可能是一个好主意,这样同一个用户总能得到相同的时区。
执行此操作后,假设date()
表示Unix时间戳,$timestamp
将自动开始使用正确的时区。它还会自动校正夏令时。因此,无需更改该功能中的任何内容。
使用timezone_identifiers_list()检索有效时区列表。