为什么PHP不再解析“BRST”日期?

时间:2018-01-03 12:00:12

标签: php datetime

BRST指的是“巴西利亚夏令时”

在版本7.0.26之前,PHP可以毫无问题地解析此字符串:

$date = DateTime("Mon Jan 01 20:00:00 BRST 2017");

在该版本之后,PHP返回:

Fatal error: Uncaught Exception: DateTime::__construct(): Failed to 
parse time string (Mon Jan 01 20:00:00 BRST 2017) at position 4 (J): 
The timezone could not be found in the database in /in/c6K56:5
Stack trace:
#0 /in/c6K56(5): DateTime->__construct('Mon Jan 01 20:0...')
#1 {main}
  thrown in /in/c6K56 on line 5

Process exited with code 255.

我搜索了更改日志,但我找不到任何解释。

以下是示例:

https://3v4l.org/c6K56#v7026

1 个答案:

答案 0 :(得分:5)

您可以在this commit中看到timezonemap.h文件已更新,以删除对brst的引用以及许多其他缩写。

提交消息显示为:

  

更新timezonemap.h,需要匹配捆绑的TZ db

深入挖掘(感谢@JamesThorpe)您可以看到Paul Eggert的缩写为introduced in July 1999。值得注意的是,他声称自己发明了这些:

  

我发明了英语缩写,我还发明了其他行与-3:00行一致。

2016年12月

This tz commit(再次由Eggert)删除缩写并用以下文字替换它们:

  

这些表使用数字缩写(如-03和-0330)表示整数小时和分钟UTC偏移。虽然早期版本使用字母时区缩写,但这些缩写是发明的,并不反映常见的做法。