You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动