我不明白为什么这是一个有效的日期
strtotime("1920-09k-12") // -1556877600 // I expect false
我发现在月份或日期之后添加字符是有效日期。
strtotime("1920-09-12d") // -1555905600 // I expect false
strtotime("1920-09n-12") // -1556838000 // I expect false
相反
strtotime("1920-09k-12k") // false
strtotime("1920r-09-12") // false
strtotime("1920-09-12") // -1555862400
这是预期的行为吗?
我使用Laravel,并且strtotime函数用于框架中的验证日期,但是当使用"误报"来保存DB中的记录时。 date引发QueryException。 我通过自定义验证解决了这个问题,但我很想知道为什么strtotime会出现这种情况。
答案 0 :(得分:1)
这可能无法完全回答您的问题,但检查您的示例日期date_parse()
的结果,似乎字符串中的第一个字母被解释为时区,而字符串的其余部分也被解释为,导致警告或错误"Double timezone specification"
,如果出现错误,则无法创建DateTime
。
例如:
<强> date_parse("1920-09-12d")
强>
Array
(
[year] => 1920
[month] => 9
[day] => 12
[hour] =>
[minute] =>
[second] =>
[fraction] =>
[warning_count] => 0
[warnings] => Array
(
)
[error_count] => 0
[errors] => Array
(
)
[is_localtime] => 1
[zone_type] => 2
[zone] => -240
[is_dst] =>
[tz_abbr] => D
)
注意时区“D”
<强> date_parse("1920-09n-12")
强>
Array
(
[year] => 1920
[month] => 9
[day] => 1
[hour] =>
[minute] =>
[second] =>
[fraction] =>
[warning_count] => 1
[warnings] => Array
(
[8] => Double timezone specification
)
[error_count] => 0
[errors] => Array
(
)
[is_localtime] => 1
[zone_type] => 2
[zone] => 60
[is_dst] =>
[tz_abbr] => N
)
注意时区“N”,此外12不被解释为月份的日期,而是我怀疑“-12”被解释为附加的时区规范,因此警告。 < / p>
<强> date_parse("1920r-09-12")
强>
Array
(
[year] =>
[month] =>
[day] =>
[hour] => 19
[minute] => 20
[second] => 0
[fraction] =>
[warning_count] => 1
[warnings] => Array
(
[5] => Double timezone specification
)
[error_count] => 1
[errors] => Array
(
[8] => Double timezone specification
)
[is_localtime] => 1
[zone_type] => 2
[zone] => 300
[is_dst] =>
[tz_abbr] => R
)
注意时区“R”,此外没有解析日期,而1920
被解释为时间19:20:00
,我怀疑字符串的其余部分被解释为2个时区, “-09”&amp; “-12”,导致错误“双时区规范”。