我有UTC时间15:00:00
基于时区的UTC偏移量为+03:00
当我尝试使用utc时间+utc偏移量创建新时间时,它显示12:00:00。
但我需要的时间是18:00:00
请给我建议。
$UTC_offset="+03:00";
date("d M, Y h:i A", strtotime("15:00:00 ".$UTC_offset))
您发布的代码解析字符串'15:00:00 +03:00
。
在简单的英语中,这个字符串表示"本地时间是15:00(下午3点),我位于GMT/UTC以东3小时的时区"。对应的UTC时间为12:00
。
碰巧你的PHP有默认的时区设置为UTC(我猜这是php.ini
的默认值,你没有改变它)。这就是为什么date()
打印07 Sep, 2016 12:00 PM
。
对我来说,你的代码打印07 Sep, 2016 03:00 PM
,因为我也在UTC+3
的时区,我的php.ini
使用它作为默认值。
不要使用date()
(或任何日期/时间函数)。有些不知道时区,有些只使用当地时间。
使用DateTime
类代替。它们可以处理时区,代码更短,更清晰。
你的具体问题很容易解决:
// Parse the input time in the UTC timezone
$date = new DateTime("15:00:00", new DateTimeZone("UTC"));
// Change the timezone to local
$date->setTimeZone(new DateTimeZone("+03:00"));
// Output the local time
echo($date->format("d M, Y h:i A"));
它显示:
07 Sep, 2016 06:00 PM
阅读更多关于DateTime
, DateTimeZone
, DateTimeInterval
和其他DateTime类的信息。它们是处理日期的现代方式。
正如注释者Marc b所指出的,减去偏移量而不是添加偏移量。作为建议,请查看php手册php:日期/时间函数,并可能考虑使用date_default_time_zone_get和…set设置默认时区(而不是手动修改)。有许多潜在的途径可以探索。
如果您想要客户的本地时间,一个简单的方法是使用客户端javascript。参见问题1如何获得用户的本地时间而不是服务器的时间?