设置PHP DateTime似乎没有观察到TimeZones

时间:2017-07-21 13:31:28

标签: php date datetime

我对PHP很新,请原谅我,如果这是一个我没有发现的愚蠢错误

我遇到了一个问题,在我们当前使用strtotime的系统中,它提前一小时返回我们的日期。例如,下午2:15,我将时区设置为欧洲而不是GMT。

我读到strotime遇到了这个问题,但是如果我尝试设置它,我就无法观察它。

所以我尝试使用PHP DateTime代替。

用户输入时间并将其选择为下午1:15,但我们希望将其存储为13:15。所以我这样做了:

$t = DateTime::createFromFormat('h:i A', $venue['startTime']);
$t_24 = $t->format('H:i:s');

然后我尝试创建我的Date对象

$d = DateTime::createFromFormat('d-m-Y H:i:s', $venue['startDay'] . ' ' . $t_24);
$d->setTimezone(new DateTimeZone('America/New_York'));
echo ' ' . $d->getTimestamp();

尝试在设置对象后设置时区,因为如果将时区添加为createFromFormat

中的第三个参数,显然它不起作用

我的计算机时间目前正在观察欧洲时间目前GMT + 1,因为我们正在观察英国的夏令时,我选择通过我们的系统设置的时间为下午1:15,因为我设置了时区I期望输出的时间戳相当于上午7:15,因为它比欧洲时间晚6个小时,但是当我转换时间戳1500639300时,它仍然等于下午2:15。可能做了一些愚蠢但却无法弄明白的东西?任何帮助将不胜感激:)

2 个答案:

答案 0 :(得分:1)

时间戳没有时区 - 它们始终处于UTC时间。如果要保存时区相关数据,请使用其他格式!例如,根据需要保存在H:i:s中。

答案 1 :(得分:1)

你可以使用gmdate()函数来实现这个

<?php $current_time = gmdate('Y-m-d H:i:s'); ?>

http://php.net/manual/en/function.gmdate.php