在PHP中,如何获取包括夏时制(DLS)的日历的UTC日期

时间:2019-06-08 05:23:20

标签: php datetime dst

我不确定PHP中的gmdate()函数是否可以捕获世界的“日光节约”现实。例如此代码:

<?php 

echo "<pre>";

echo "Current timezone: ", date_default_timezone_get(), "\n"; 
$future_date = 'Nov 03, 2019  03:30 PM EDT';
$future_UTC  = gmdate('M d, Y  h:i A T', strtotime($future_date));

echo "
New York Date: $future_date 
GMT/UTC time:  $future_UTC
"; 

?>

打印出此内容:

Current timezone: UTC

  New York Date: Nov 03, 2019  03:30 PM EDT 
  GMT/UTC time:  Nov 03, 2019  07:30 PM GMT

从技术上讲这是不正确的,因为11月3日下午2点,DLS将切换,并且GMT / UTC中的时间实际上是 08:30 PM ,而不是错误的 07: PHP正在显示30 PM (基于今天的DLS)。

有什么方法可以自动获取将来日期的正确时间?

1 个答案:

答案 0 :(得分:3)

这里有很多错误,从您的问题的标题开始:

  

如何获取包括夏时制(DLS)的日历的UTC日期

UTC定义明确,没有夏令时。如果您所在的时区不同,并且所在的地区具有夏令时,那么您将不再使用UTC。因此,这个问题从一开始就毫无意义。

$future_date = 'Nov 03, 2019  03:30 PM EDT';

EDT的意思是“东部夏令时间”,因此在这种情况下,无论日期如何,您都必须执行特定的解释。您会注意到,如果将其更改为EST(东部标准时间),则会得到不同的结果。

您可能希望使用America/New_York而不是EDT。另请参阅:https://www.php.net/manual/en/timezones.php

  

从技术上讲这是不正确的,因为11月3日下午2点,DLS将切换

不。 2:00 AM。

  

有什么方法可以自动为将来的日期获取合适的时间?

停止提供PHP损坏的数据和格式不明确的日期。我们有日期/时间标准是有原因的,例如ISO8601。日期/时间是一件复杂的事情。对于具有夏令时的特定时区类型,如果计算机给了错误的日期,则计算机无法听懂他们的想法,也不知道您的意图。