gpt4 book ai didi

javascript - PHP 的日期验证有问题

转载 作者:行者123 更新时间:2023-12-03 00:35:21 24 4
gpt4 key购买 nike

我正在尝试验证 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com