在php

时间:2016-09-07 15:50:44

标签: php

我的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))

2 个答案:

答案 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

详细了解DateTimeDateTimeZoneDateTimeInterval和其他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?