Carbon::createFromFormat()未抛出无效日期异常的问题及合法UK日期格式校验方案咨询
Carbon::createFromFormat()未抛出无效日期异常的问题及合法UK日期格式校验方案咨询
我遇到了一个Carbon日期处理的问题,先给大家看看我的代码:
try { Carbon::createFromFormat('dmY', $rawDate)->format('Ymd'); } catch (InvalidFormatException $e) { echo 'Oops, bad date format.'; }
测试下来出现了两种不同的结果:
- 当我传入
31012024作为$rawDate的值时,返回了20240131,这是正确的,Carbon成功识别并按照预期格式化了UK格式的日期(ddmmyyyy)。 - 但如果传入
01312024(也就是“31月1日”),Carbon并没有抛出InvalidFormatException异常,反而返回了20260701,这完全不是我想要的结果——毕竟31月根本不存在,我原本以为这种情况会直接触发异常。
我可以自己写脚本去校验字符串的前两位(日)不超过31、中间两位(月)不超过12,但这样还要考虑不同月份的天数差异以及闰年的问题,实在太繁琐了。
我的核心问题是:有没有Carbon的其他方法,可以在调用createFromFormat之前(或者配合它使用)先验证这个日期是完全合法的?
另外需要说明的是,我不能使用parse方法,因为它会成功解析美式日期格式,而我的脚本必须只接受并验证UK的ddmmyyyy格式——任何其他格式都不应该被通过。
最后补充下环境信息:我使用的是Carbon 2.72.5,且不在Laravel环境中,所以没法用Laravel的验证工具。
备注:内容来源于stack exchange,提问作者Ethan Field




