不一致的 strtotime 转换

Inconsistent strtotime conversions

使用 strtotime 对日期进行转换时,我得到的结果不一致。

array[0] 保存要转换的日期:

Original -> converted -> converted back

Array ([0] => 30.01.15) -> 1422576000 -> GMT: Fri, 30 Jan 2015 00:00:00 GMT
Array ([0] => 23.01.15) -> 1427925675 -> GMT: Wed, 01 Apr 2015 22:01:15 GMT

当使用破折号而不是点时,我得到:

Array ([0] => 30-01-15) -> 1894665600 -> GMT: Tue, 15 Jan 2030 00:00:00 GMT
Array ([0] => 23-01-15) -> 1673740800 -> GMT: Sun, 15 Jan 2023 00:00:00 GMT

它在第一个实例中工作,使用点,但在第二个实例中使用点我得到今天的日期?有什么想法可能导致这种不一致吗?

看来 PHP 正在以不同的格式解释日期。

Array ([0] => 30.01.15) -> 1422576000 -> GMT: Fri, 30 Jan 2015 00:00:00 GMT

正在读取日期 DD.MM.YY

Array ([0] => 30-01-15) -> 1894665600 -> GMT: Tue, 15 Jan 2030 00:00:00 GMT

读取日期为 YY-MM-DD

尝试将其更改为:

Array ([0] => 15-01-30)

根据 PHP 手册,必须以支持的 date/time 格式提供日期和时间:http://php.net/manual/en/datetime.formats.date.php

日期值似乎不支持 "dot" 表示法,因此 PHP 尝试将其解析为时间,这就是您出现这种 "strange" 行为的原因。

为了更好地解释不同的行为: 第一个 运行 30 不能解释为小时值,因此 PHP 尝试使用日期解析,第二个 运行,23 是一个合理的小时值,所以它用于时间。

The "Day, month and two digit year, with dots or tabs" format (dd [.\t] mm "." yy) only works for the year values 61 (inclusive) to 99 (inclusive) - outside those years the time format "HH [.:] MM [.:] SS" has precedence