與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