php - 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
谢谢
解决方案
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
函数中的字符串应用到更改m
为n
.
因此:
$date = "4/20/2019";
if( validateDateFormats($date, 'm/d/Y')
|| validateDateFormats($date, 'n/d/Y') ){
print "This date is valid.";
}
推荐阅读
- google-sheets - 如何使用 IMPORTRANGE 从底部进行 VLOOKUP
- sql - R相当于SQL中的LIKE子句[使用查找表]?
- python - 有没有更好的方法从python中的输入文件生成rest api端点?
- python - 在 DataFrame 嵌套数组上应用条件
- python - 从相关目录迭代导入 Python 脚本
- javascript - 如何在 require() 语句中正确传递构造函数参数?
- c++ - 将由空格分隔的数据读入结构数组
- python - 如何在python中使用if/elif创建一个while循环而不会出现语法错误
- android - 如何使用 mysql 数据库使用查询来选择数据?
- angularjs - Angularjs过滤一个字段的两个值