Laravel中date_format验证指定格式日期时间不生效问题
问题原因
Laravel的date_format验证规则底层依赖PHP原生日期解析能力,使用PHP官方date()函数定义的格式占位符,你当前配置的dd/MM/yyyy HH:mm是前端JS日期库(如moment.js、flatpickr)通用的格式标记,和PHP的格式规则不兼容,直接使用必然验证失败。
具体占位符的错误点:
dd:PHP中单个d就代表带前导零的两位日期(取值范围01-31),重复写d会被解析为「两位日期 + 字面量字符d」,和实际输入的纯数字日期格式不符MM:PHP中大写M代表3个字母的月份缩写(如Jan、Aug),带前导零的两位数字月份实际对应小写m,重复写M会被解析为「月份缩写 + 字面量字符M」,完全无法匹配数字格式的月份yyyy:PHP中小写y代表两位数字年份,四位数字年份实际对应大写Y,连续写4个y会被解析为「两位年份 + 3个字面量字符y」,匹配不了四位数字的年份值mm:PHP中小写m代表月份,带前导零的两位分钟数实际对应小写i,连续写两个m会被解析为「两位月份 + 字面量字符m」,和实际输入的分钟值完全不匹配
修复方案
将验证规则替换为PHP兼容的格式即可:
'time_in' => 'date_format:d/m/Y H:i',
上述规则中各占位符的语义和实际输入的日期格式完全对应:
d:带前导零的两位日期m:带前导零的两位数字月份Y:四位数字年份H:24小时制带前导零的两位小时i:带前导零的两位分钟数
内容的提问来源于stack exchange,提问作者Veljko Stefanovic
相关产品推荐
相关产品推荐

