如何判断一个日期正确呢?

背景

从 Excel 导入数据判断日期的时候,有条数据绝对符合日期格式,但是遇到了 2022-02-30 这样的日期。

暂解决方案

把日期转换一下,如果和原来的数据不一致,就可以判断日期不对,代码如下:

  /**
  * 判断时间是否正确
  *
  * 为修复 2022-02-30
  * @param $timeStr
  * @return bool
  */
  private function timeCheck($timeStr): bool
  {
          // date 后的日期会是 2022-03-02
          return date('Y-m-d', strtotime($timeStr)) == $timeStr;
  }

潜意识里感觉 有轮子有更好的方法,可能 Carbon 已经有对应方法了,不过当前没时间详看文档。


后续

Laravel 中可以这样实现

利用表单验证提供的能力,该方法对于日期 02 之类的也能验证(由 @chutrue 提供)

    public function timeCheck($timeStr): bool
    {
        return validator(
            ['timeStr' => $timeStr],
            ['timeStr'=> 'bail|required|date']
        )->fails() != true;
    }
莫等闲,白了少年头,空悲切
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 5

还行,就是不支持 2010-2-30 没有前导 0

2年前 评论
bigbug-gg (楼主) 2年前
随波逐流

可用表单验证, 如果有错误就会抛出异常 Illuminate\Validation\ValidationException


use Illuminate\Support\Facades\Validator;

public function body(array $data): array
{
      return Validator::make($data, [
            '*.0' => ['required','date'], // 0: 时间列
      ])->validate();
}
2年前 评论
bigbug-gg (楼主) 2年前
sane

checkdate

$date = '2022-02-30';
var_dump(checkdate(...explode('-', $date)));
// bool(false)
2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!