【问题标题】:Inconsistent strtotime conversions不一致的 strtotime 转换
【发布时间】:2015-06-06 04:52:32
【问题描述】:

使用 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 date epoch


    【解决方案1】:

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

    日期值似乎不支持“点”表示法,因此 PHP 尝试将其解析为时间,这就是为什么会出现这种“奇怪”行为的原因。

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

    “日、月和两位数年份,带点或制表符”格式 (dd [.\t] mm "." yy) 仅适用于年份值 61(含)至 99(含)- 不包括这些年时间格式“HH [.:] MM [.:] SS”优先

    【讨论】:

    • 在该链接中,它列出了“日、月和两位数的年份,带有点或制表符”,示例“30.6.08”是兼容的,所以它不应该以这种格式解析日期?
    • @Shuma 在您的笔记中:“日、月和两位数年份,带点或制表符”格式(dd [.\t] mm "." yy)仅适用于年份值61(含)到 99(含)- 在这些年份之外,时间格式“HH [.:] MM [.:] SS”优先
    • 啊,我明白了,这更有意义,感谢您提供的信息
    【解决方案2】:

    似乎 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-08
      • 1970-01-01
      • 2011-11-26
      • 2010-10-29
      • 2021-11-24
      • 2011-05-29
      • 1970-01-01
      相关资源
      最近更新 更多