与Laravel验证器一起工作,我发现验证日期有一个奇怪的问题。php date_parse_from_format()无法识别y和Y之间的差异
Laravel date_format依赖于php date_parse_from_format方法。但是,当您将格式设置为d/m/Y时,此方法似乎无法识别y和Y之间的差异。因此,如果您在2015年1月1日或2015年1月1日通过,两个解析都没有错误。你会期望前者出错,或者至少我会。
如果将格式更改为d/m/y,则其按预期工作。那是01/01/15通行证和01/01/2015通行证失败。
我很想知道是否有其他人对此有任何想法,以及我是否漏掉了明显的东西。这可能对PHP和Laravel都有影响。
注意我使用PHP 5.6.16和我的输出如下所示...输出数据
string 'd/m/Y' (length=5)
string '01/01/15' (length=8)
array (size=12)
'year' => int 15
'month' => int 1
'day' => int 1
'hour' => boolean false
'minute' => boolean false
'second' => boolean false
'fraction' => boolean false
'warning_count' => int 0
'warnings' =>
array (size=0)
empty
'error_count' => int 0
'errors' =>
array (size=0)
empty
'is_localtime' => boolean false
string 'd/m/Y' (length=5)
string '01/01/2015' (length=10)
array (size=12)
'year' => int 2015
'month' => int 1
'day' => int 1
'hour' => boolean false
'minute' => boolean false
'second' => boolean false
'fraction' => boolean false
'warning_count' => int 0
'warnings' =>
array (size=0)
empty
'error_count' => int 0
'errors' =>
array (size=0)
empty
'is_localtime' => boolean false
string 'd/m/y' (length=5)
string '01/01/15' (length=8)
array (size=12)
'year' => int 2015
'month' => int 1
'day' => int 1
'hour' => boolean false
'minute' => boolean false
'second' => boolean false
'fraction' => boolean false
'warning_count' => int 0
'warnings' =>
array (size=0)
empty
'error_count' => int 0
'errors' =>
array (size=0)
empty
'is_localtime' => boolean false
string 'd/m/y' (length=5)
string '01/01/2015' (length=10)
array (size=12)
'year' => int 2020
'month' => int 1
'day' => int 1
'hour' => boolean false
'minute' => boolean false
'second' => boolean false
'fraction' => boolean false
'warning_count' => int 0
'warnings' =>
array (size=0)
empty
'error_count' => int 1
'errors' =>
array (size=1)
8 => string 'Trailing data' (length=13)
'is_localtime' => boolean false
示例代码...
$format = 'd/m/Y';
var_dump($format);
$date = '01/01/15';
var_dump($date);
var_dump(date_parse_from_format($format, $date));
$format = 'd/m/Y';
var_dump($format);
$date = '01/01/2015';
var_dump($date);
var_dump(date_parse_from_format($format, $date));
etc...
你最近怎么解析你的日期?你能告诉我们一些代码吗? – tptcat
可能是因为'15',即'15AD'是可以假定为“0015”的有效年份。 –
增加了一些代码。我也假定它涉及到公元15年,但Y暗示着yyyy。所以当然不应该在这些基础上解析。它预计四位数字? – RobDW1984