我正在尝试验证 d-m-Y 格式的输入 type="date"中的日期。该日期不能早于今天。 我正在转换数字的差值,然后询问该数字是否小于 0。
这是我的验证函数:
public static function validateDate($date){
$dateToday = date_create(date('d-m-Y'));
$datetime = date_create($date);
if(date_diff($dateToday, $datetime)->format('%a') < 0){
return false;
}
else{
return true;
}
}
该功能不起作用。用户可以选择 future 的任何日期,它会以 YYYY-MM-DD 的形式直接进入数据库。
我在这里很迷失任何帮助,将不胜感激。
最佳答案
对于初学者来说,这可能是一个糟糕的举动:
$dateToday = date_create(date('d-m-Y'));
这很糟糕,因为日期和月份都有 2 位数字。虽然它实际上可能会给出您期望的结果,但对于美国编码人员来说,它看起来违反直觉,因为这里的日期通常是写成 m-d-Y 的。我建议 date("F j, Y")
这是一种更清晰的日期格式:
var_dump(日期("F j, Y"));//输出“2018 年 12 月 8 日”
其次,您似乎没有对提供给函数的 $date 参数进行任何验证。它可能是 d-m-Y 格式的字符串,您应该通过一些验证来强制执行。
最后,您在这一行中指定的 %a
格式化程序仅提供日期差异的数字...它没有指定这是否是一个正数差异或负差异。:
if(date_diff($dateToday, $datetime)->format('%a') < 0){
//blah blah blah
}
您还需要包含 %R
格式标志才能获得差异的 +/-:
if(date_diff($dateToday, $datetime)->format('%R%a') < 0){
//blah blah blah
}
最后,从 PHP 5.2.2 开始,您可以只比较使用比较运算符创建的日期对象。这比将字符串与零进行比较的代码更好。试试这个功能:
public static function validateDate($date){
if (!preg_match('/^\d{2}-\d{2}-\d{4}$/', $date)) {
throw new Exception("$date is not a valid date in d-m-Y format");
}
$today = date_create(date("Y-m-d"));
$datetime = date_create($date);
if ($datetime > $today) {
return false;
} else {
return true;
}
}
关于javascript - PHP 的日期验证有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53686216/