首页 > 解决方案 > PHP - 验证日期格式为 d/m/Y

问题描述

我正在从要求格式为 d/m/Y 的 CSV 导入日期,例如:20/4/1999。

如何检查用户是否正确输入而不是 m/d/Y 例如:1999 年 4 月 20 日。

我尝试使用以下方法,但两种情况都返回 false

function validateDateFormats(string $date, string $format='d/m/Y')
    {
        $d = DateTime::createFromFormat($format, $date);
        return $d && $d->format($format) == $date;
    }

var_dump(validateDateFormats('20/4/1999'));
var_dump(validateDateFormats('4/20/1999'));

上面的函数为 '04/20/1999' 返回 true。但是有没有办法让它为 '4/20/1999' 也返回 true 呢?

这些日期应返回 true:20/4/1999、20/04/1999

这些日期应该返回 false:04/20/1999, 4/20/1999

谢谢

标签: phpdate

解决方案


 function validateDateFormats(string $date, string $format='d/m/Y')
    {
    $d = DateTime::createFromFormat($format, $date);
    return $d && $d->format($format) == $date;
    }

var_dump(validateDateFormats('20/4/1999'));
var_dump(validateDateFormats('4/20/1999'));

上面的函数为 '04/20/1999' 返回 true。但是有没有办法让它为 '4/20/1999' 也返回 true 呢?

来自PHP 手册

m 月份的数字表示,带前导零 01 到 12
n 月份的数字表示,不带前导零 1 到 12

因此呢 var_dump(validateDateFormats('4/20/1999','n/d/Y'));

查看函数并看到第二个参数为您提供了返回 true 所需的日期格式,因此您需要做的就是将format函数中的字符串应用到更改mn.

因此:

$date = "4/20/2019";
if( validateDateFormats($date, 'm/d/Y')
    ||  validateDateFormats($date, 'n/d/Y') ){
    print "This date is valid."; 
}

推荐阅读