提问者:小点点

PHP日期()与时区?


所以我检查了PHP支持的时区列表,我想知道如何将它们包含在date()函数中?谢谢!

我不想要默认时区,每个用户都将他们的时区存储在数据库中,我获取用户的那个时区并使用它。怎么做?不过,我知道如何从数据库中获取它,而不是如何使用它。


共3个答案

匿名用户

对于这样的任务,您应该使用PHP的DateTime类。请忽略所有建议您使用date()或date_set_time_zone的答案,它只是糟糕和过时的。

我将使用伪代码来演示,因此请尝试调整代码以满足您的需求。

假设变量$tz包含有效时区的字符串名称,并且变量$timestam包含您希望根据时区格式化的时间戳,代码如下所示:

$tz = 'Europe/London';
$timestamp = time();
$dt = new DateTime("now", new DateTimeZone($tz)); //first argument "must" be a string
$dt->setTimestamp($timestamp); //adjust the object to correct timestamp
echo $dt->format('d.m.Y, H:i:s');

DateTime类功能强大,要掌握它的所有功能-您应该花一些时间在php.net阅读它。为了完全回答您的问题-是的,您可以动态调整时区参数(在每次迭代中读取数据库时,您可以创建一个新的DateTimeZone()对象)。

匿名用户

如果我理解正确,您需要先设置时区,例如:

date_default_timezone_set('UTC');

并且比你可以使用日期函数:

// Prints something like: Monday 8th of August 2005 03:12:46 PM
echo date('l jS \of F Y h:i:s A');

匿名用户

上面的答案让我经历了一些困难/陷阱,所以只需发布对我有用的更简洁的代码:

$dt = new DateTime();
$dt->setTimezone(new DateTimeZone('America/New_York'));
$dt->setTimestamp(123456789);

echo $dt->format('F j, Y @ G:i');