PHP我的日期验证有问题

时间:2018-12-08 19:35:38

标签: javascript php forms

我正在尝试以d-m-Y格式验证输入类型为“ date”的日期。日期不能高于今天。 我正在转换数字差,然后询问数字是否小于0。

这是我的验证功能:

SCNView

该功能不起作用。用户可以选择将来的任何日期,并且该日期会以YYYY-MM-DD的形式直接进入数据库。

我很迷失在这里,任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

对于初学者来说,这可能是一个不好的举动:

$dateToday = date_create(date('d-m-Y'));

这很糟糕,因为日期和月份都有两位数字。虽然实际上可以给您期望的结果,但是它与美国编码人员的直觉相反,因为日期通常在此处写为m-d-Y。我建议使用date("F j, Y")这是一种更清晰的日期格式: var_dump(date("F j, Y")); // outputs "December 8, 2018" 其次,您似乎没有对提供给函数的$ date参数进行任何验证。大概是d-m-Y格式的字符串,您应该通过一些验证来强制执行。

最后,您在此行中指定的%a格式化程序仅提供了日期差的数字...它没有指定是还是< em>负差异。

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;
    }
}