You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP日期验证函数问题:单数字日/月输入无法被正确识别

问题分析与修复方案

嘿,这个问题一眼就能找到症结!咱们来拆解下你的代码哪里出了问题:

你的验证逻辑最后一步用了$d->format('j-F-Y') === $date做匹配,但j这个日期格式符是不带前导零的日数字(比如会把03变成3),而用户输入的日期日部分是带前导零的(比如03-February-2018里的03)。这就导致解析后的日期格式化后变成了3-February-2018,和原输入字符串不相等,所以错误地返回了false——哪怕这个日期本身完全有效。

修复后的代码

只需要把比较时用的格式符从j改成d就行,d是带前导零的两位日数字,和你要求的输入格式完全匹配:

function validateDate($date){ 
    $d = DateTime::createFromFormat('d-F-Y', $date); 
    return $d && $d->format('d-F-Y') === $date; 
}
echo validateDate("03-February-2018"); // 现在会正确返回true啦

小知识点补充

  • d:代表两位数字的日,自动补前导零(范围01到31)
  • j:代表不带前导零的日(范围1到31)
  • 用和输入格式完全一致的d-F-Y来格式化解析后的日期,再和原输入比较,既能验证输入格式是否合规,又能确保日期本身是有效的。

内容的提问来源于stack exchange,提问作者M9A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:06:11