当前位置: 首页 > 知识库问答 >
问题:

PHP计算UTC时间错误

阳昊
2023-03-14

环境:PHP 7.3.13RC1;CentOS 7.7.1908;服务器时区“欧洲/柏林”

观察结果:

以下PHP脚本:

$date1=date_create("now");
$date2=date_create("now");
$date3=date_create("now");
$tz1=new DateTimeZone("Europe/Berlin");
$tz2=new DateTimeZone("UTC");
$tz3=new DateTimeZone("GMT");

echo "Current Set Times:","\n";
echo "Date 1: ", $date1->format(DateTime::ATOM), "\n";
echo "Date 2: ", $date2->format(DateTime::ATOM), "\n";
echo "Date 3: ", $date3->format(DateTime::ATOM), "\n";

$date1->setTimezone($tz1);
$date2->setTimezone($tz2);
$date3->setTimezone($tz3);
echo "Times with new Time Zone Set", "\n";
echo "Date 1: ", $date1->format(DateTime::ATOM), "\n";
echo "Date 2: ", $date2->format(DateTime::ATOM), "\n";
echo "Date 3: ", $date3->format(DateTime::ATOM), "\n";

此输出中的结果:

Current Set Times:
Date 1: 2019-12-21T22:01:00+01:00
Date 2: 2019-12-21T22:01:00+01:00
Date 3: 2019-12-21T22:01:00+01:00
Times with new Time Zone Set
Date 1: 2019-12-21T22:01:00+01:00
Date 2: 2019-12-21T22:01:00+00:00
Date 3: 2019-12-21T21:01:00+00:00

鉴于我希望看到以下输出:

Current Set Times:
Date 1: 2019-12-21T22:01:00+01:00
Date 2: 2019-12-21T22:01:00+01:00
Date 3: 2019-12-21T22:01:00+01:00
Times with new Time Zone Set
Date 1: 2019-12-21T22:01:00+01:00
Date 2: 2019-12-21T21:01:00+00:00
Date 3: 2019-12-21T21:01:00+00:00

区别在于第二个日期的输出。UTC时间缩短一小时(22:01:00而不是21:01:00)。

我在这里不知所措。我试图在php.ini内设置一个默认时区,但无济于事。

使用“日期”和“日期-u”给了我正确的时间。

timedatectl提供以下输出:当地时间:Sa 2019-12-21 22:06:49 CEST世界时间:Sa 2019-12-21 21:06:49 UTC时区:欧洲/柏林(CET,0100)

也许其他人知道这里发生了什么。

共有1个答案

充子航
2023-03-14

我也无法复制。看这里。PHP的时区可能设置不正确。

将此添加为第一行

date_default_timezone_set("Europe/Berlin");

然后再试一次。

 类似资料:
  • 我正试图在RoR上创建一个计算时间的应用程序。 当您按下开始按钮时,它会拉Time.now,然后,当您按下停止时,它会再次拉Time.now,然后计算两者之间的时间量。然后它会通过to_i将给定的秒转换为整数,然后将整数秒计算为小时:分钟:秒 然而,我的代码出了点问题,它不停地抛出一个又一个错误。 当前顺序为 nil:NilClass 的“未定义方法 '-'”

  • 我正在尝试使用Joda在一个简单的Java程序中获取UTC时间戳: 程序输出如下: 毫秒值是正确的UTC时间(即用时区确认)第二个值是时区。 我需要的是UTC值不变为(即独立于TZ),用于数据库写入。这可能吗? 我知道是本地日期(GMT-4),是UTC(GMT-0)。日期的输出值如下: 我尝试了所有组合,试图将的UTC值作为java.sql.TimeStamp: 用于测试的打印输出: 第一行是正确

  • 问题内容: 我需要一种简便的方法,可以在不使用任何库的情况下将日期时间戳转换为UTC(从服务器所在的任何时区)。 问题答案: 尝试getTimezone和setTimezone,请参见示例 (但这确实使用了一个类) 更新: 没有任何类,您可以尝试这样的事情: 注意:您可能还需要将时区设置回原始

  • 本文向大家介绍php时间计算相关问题小结,包括了php时间计算相关问题小结的使用技巧和注意事项,需要的朋友参考一下 本文实例总结了php时间计算相关问题。分享给大家供大家参考,具体如下: 1. php获取三个月前的日期 2. 计算日期30天后 可以用strtotime PHP提供了一个超级简单的方式来完成本来要几十行代码的工作。 先把某日期转换成UNIX时间戳 3. 转换2日期的时间戳...然后相

  • 问题内容: 我只想检查是否返回UTC / GMT时间戳,还是需要使用? 问题答案: 返回UNIX时间戳,该时间戳与时区无关。由于UNIX时间戳表示自1970年 UTC 以来的秒数,您可以说它是UTC,但实际上没有时区。 实际上,UNIX时间戳在任何给定时间在全世界范围内都是相同的值。在撰写本文时,它在东京,伦敦和纽约。要将其转换为“人类可读”的时间,您需要指定要显示的时区。在东京是,在伦敦是在纽约