N.B*_*.B. 113
对于这样的任务,你应该真正使用PHP的DateTime类.请忽略所有建议您使用date()或date_set_time_zone的答案,它只是糟糕和过时.
我将使用伪代码进行演示,因此请尝试调整代码以满足您的需求.
假设变量$ tz包含有效时区的字符串名称,变量$ timestamp包含您希望根据时区格式化的时间戳,代码将如下所示:
$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');
Run Code Online (Sandbox Code Playgroud)
DateTime类功能强大,并且要掌握它的所有功能 - 你应该花一些时间在php.net上阅读它.要完全回答您的问题 - 是的,您可以动态调整时区参数(在从db读取每次迭代时,您可以创建一个新的DateTimeZone()对象).
Sur*_*shi 29
如果我理解正确,你需要先设置时区,如:
date_default_timezone_set('UTC');
Run Code Online (Sandbox Code Playgroud)
而且你可以使用日期功能:
// Prints something like: Monday 8th of August 2005 03:12:46 PM
echo date('l jS \of F Y h:i:s A');
Run Code Online (Sandbox Code Playgroud)
cee*_*yoz 17
请改用DateTime类,因为它支持时区.日期时间相当于date()
是DateTime::format
.
DateTime的一个非常有用的包装是Carbon - 绝对可以看一看.
您希望以UTC格式存储在数据库中并在应用程序级别进行转换.
小智 8
它应该是这样的:
date_default_timezone_set('America/New_York');
Run Code Online (Sandbox Code Playgroud)
上面的答案让我跳过了一些箍/陷阱,所以只需发布适合我的清洁代码:
$dt = new DateTime();
$dt->setTimezone(new DateTimeZone('America/New_York'));
$dt->setTimestamp(123456789);
echo $dt->format('F j, Y @ G:i');
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以将时区差异添加到 unix 时间戳。莫斯科示例 (UTC+3)
echo date('d.m.Y H:i:s', time() + 3 * 60 * 60);
Run Code Online (Sandbox Code Playgroud)
根据其他答案,我构建了一个单行,我想您需要当前的日期时间。如果您需要不同的时间戳,调整起来很容易。
$dt = (new DateTime("now", new DateTimeZone('Europe/Rome')))->format('d-m-Y_His');
Run Code Online (Sandbox Code Playgroud)