我不确定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)。
有什么方法可以自动获取将来日期的正确时间?
答案 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。日期/时间是一件复杂的事情。对于具有夏令时的特定时区类型,如果计算机给了错误的日期,则计算机无法听懂他们的想法,也不知道您的意图。