如何在strtotime中更改时区?

时间:2019-05-02 03:33:57

标签: php

总结一下就是我的代码:

echo @date('h:i A e', @strtotime($db_order_data['DeliveryDate'])); ?> on <?= @date('d M Y', @strtotime($db_order_data['DeliveryDate']));

如何更改特定交货日期的时区?

注意:我试图在最顶层的php上添加define('TIMEZONE', 'Pacific/Taipei');,但仍然无法正常工作。任何帮助将不胜感激。谢谢。

编辑:时间本身就是我需要更改的时间。包括时区。对不起,我的英语不好。

2 个答案:

答案 0 :(得分:0)

除非您的日期字符串包含时区,否则

strtotime()将采用PHP的默认时区(通过php.ini或date_default_timezone_set()设置)。

在运行时为此设置全局设置并不是真正的最佳实践。为此,最好使用DateTime类。

$dt = new \DateTime($db_order_data['DeliveryDate'], new \DateTimeZone('Pacific/Taipei'));
echo $dt->format('h:i A e') . " on " . $dt->format('d M Y');

答案 1 :(得分:0)

要执行此操作,可以使用DateTime对象,首先使用数据库值的时区(如果是MySQL,则可能是UTC)创建该对象,然后调整结果的时区。

$date = new DateTime($db_order_data['DeliveryDate'], new DateTimeZone('America/Chicago'));
$date->setTimeZone(new DateTimeZone('Asia/Taipei'));
echo $date->format('h:i A e') . " on " . $date->format('d M Y');

请注意,Pacific/Taipei对PHP无效,您需要使用Asia/Taipei

例如,如果为$db_order_data['DeliveryDate'] = '2019-04-29 14:30:00';,则输出为:

03:30 AM Asia/Taipei on 30 Apr 2019

Demo on 3v4l.org