我正在使用strtotime
来解析类似10:24 AM 22-Sep
的日期,然后通过checkdate
解析此问题
$pickup_time = strtotime($pickupTime);
if (!checkdate(date(n,$pickup_time) ,date(j,$pickup_time), date(Y,$pickup_time)));
{
echo json_encode(array("msg"=>"Nice one, that date doesn't exist. Try again.","status"=>"false"));
break;
}
但是strtotime会将糟糕的日期转换为它看起来的下一个逻辑日期。所以9月31日变成10月1日。完全取消checkdate功能。您是否可以使用strtotime()
检查有效日期?
答案 0 :(得分:2)
strtotime()
没有日期的内置验证,因此如果您需要,请手动执行
ps:写date(n,$pickup_time)
是错误的。只要n
是字符串 - 将其放在引号内:date('n', $pickup_time)
答案 1 :(得分:1)
您是否可以使用strtotime()检查有效日期?
不,strtotime()
的目的是做最好的PHP可以解释你的日期。从php.net上的简短描述:
将任何英文文本日期时间描述解析为Unix 时间戳
如果你的字符串无意义,strtotime()
仍会解析它。有时它会出现垃圾,但这实际上取决于你如何接受用户的输入。
答案 2 :(得分:1)
您可以将字符串转换为日期,然后将其格式化为与您读入的格式匹配的字符串。如果字符串不匹配,则日期无效。
例如:
$str = '10:24 AM 22-Sep';
$d = new DateTime($str);
if ($d->format('H:i A j-M') != $str) {
echo 'Date is invalid';
}
您需要转换代码才能使用非对象版本日期函数。但是,这仅在您期望某种格式时才有效。
对编辑感到抱歉。这是我的第一篇文章。