在php中使用格式字符P创建时间


create time with format character P in php

我有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如何获得用户的本地时间而不是服务器的时间?