strtotime()不会警告无效日期

时间:2011-09-21 23:48:45

标签: php

我正在使用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()检查有效日期?

3 个答案:

答案 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';
}

您需要转换代码才能使用非对象版本日期函数。但是,这仅在您期望某种格式时才有效。

对编辑感到抱歉。这是我的第一篇文章。