如何检查字符串是否为有效日期?以"2018-01-01"为例
检查日期有效性的简便方法(基于Carbon)
嘿,这个问题我太熟啦!其实Carbon给咱们准备了好几种更简便的实现方式,不一定非得用你提到的那种写法~
1. 最简洁的通用判断:tryParse()
如果你的场景只需要确认字符串是合法的日期格式,不需要严格匹配某一种格式,那tryParse()绝对是首选——它会自动尝试解析各种常见日期格式,解析失败直接返回null,判断起来超省心:
$dateString = "2018-01-01"; if (Carbon::tryParse($dateString)) { // 这是有效日期 } else { // 无效日期 }
2. 严格匹配特定格式:带严格模式的createFromFormat()
如果你的需求是必须严格符合指定格式(比如用户输入必须是Y-m-d,不能是其他格式),那可以给createFromFormat()的格式字符串加上!前缀启用严格模式,再结合isValid()判断,这样能避免Carbon自动“修正”无效日期(比如把2018-13-01自动转成2019-01-01):
$dateString = "2018-01-01"; $date = Carbon::createFromFormat('!Y-m-d', $dateString); if ($date && $date->isValid()) { // 符合指定格式的有效日期 } else { // 格式不匹配或日期无效 }
3. 通用解析+有效性验证:parse() + isValid()
和tryParse()类似,parse()也能自动识别格式,但它不会返回null,而是返回一个Carbon实例,这时可以用isValid()来判断是否为有效日期:
$dateString = "2018-01-01"; $date = Carbon::parse($dateString); if ($date->isValid()) { // 有效日期 } else { // 无效日期 }
简单总结下:
- 追求简洁、不需要严格格式:用
Carbon::tryParse() - 必须严格匹配格式:用带
!的createFromFormat()+isValid() - 想手动控制解析后的后续操作:用
parse()+isValid()
内容的提问来源于stack exchange,提问作者Mick
相关产品推荐
相关产品推荐

