我的UTC时间是15:00:00
基于时区的UTC偏移量为+03:00
当我尝试使用utc time + utc offset创建新时间时,它显示为12:00:00。
但我需要的时间是18:00:00
请给我建议。
$UTC_offset="+03:00";
date("d M, Y h:i A", strtotime("15:00:00 ".$UTC_offset))
答案 0 :(得分:2)
您发布的代码解析字符串'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类。它们是处理日期和现代的现代方式。 PHP中的时间。
答案 1 :(得分:0)
作为评论者Marc B.指出,减去偏移量而不是添加偏移量。有关建议,请查看php手册PHP: Date/Time Functions,并考虑使用date_default_time_zone_get和... set设置默认时区(而不是手动修改)。有很多途径可以追求。
如果您希望客户在当地时间,一种简单的方法是使用客户端javacript。请参阅问题How can I get the user's local time instead of the server's time?