Php strotime()不';t警告无效日期

Php strotime()不';t警告无效日期,php,Php,我正在使用strotime解析一个日期,类似于9月22日上午10:24然后我通过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. T

我正在使用
strotime
解析一个日期,类似于9月22日上午10:24然后我通过
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;     
 }
但是strotime会将错误日期转换为下一个看起来合理的日期。所以9月31日变成了10月1日。完全作废checkdate函数。您是否能够使用
strotime()
检查有效日期?

strotime()
没有内置的日期验证,因此如果需要,请手动执行

注:写入日期(n$pickup\u time)是错误的
。只要
n
是一个字符串-将其放在引号内:
date('n',$picku time)
strotime()
没有内置的日期验证,因此如果需要,请手动执行

注:写入日期(n$pickup\u time)是错误的
。只要
n
是一个字符串-将它放在引号内:
date('n',$picku time)

是否可以使用strotime()检查有效日期

不,它的目的是尽PHP所能解释您所指的日期。从php.net上的简短描述中:

将任何英文文本datetime描述解析为Unix 时间戳

如果字符串没有意义,
strotime()
仍将解析它。有时它会变成垃圾,但这实际上取决于您如何接受用户的输入。

您是否能够使用strotime()检查有效日期

不,它的目的是尽PHP所能解释您所指的日期。从php.net上的简短描述中:

将任何英文文本datetime描述解析为Unix 时间戳


如果字符串没有意义,
strotime()
仍将解析它。有时它会变成垃圾,但这实际上取决于您如何接受用户的输入。

您可以将字符串转换为日期,然后将其格式化为与您读取的格式相匹配的字符串。如果字符串不匹配,则日期无效

例如:

$str = '10:24 AM 22-Sep';
$d = new DateTime($str);
if ($d->format('H:i A j-M') != $str) {
    echo 'Date is invalid';
}
您需要将代码转换为使用非对象版本日期函数。但是,这仅在您希望使用某种格式时有效


很抱歉编辑了。这是我的第一篇文章。

您可以将字符串转换为日期,然后将其格式化为与您阅读的格式相匹配的字符串。如果字符串不匹配,则日期无效

例如:

$str = '10:24 AM 22-Sep';
$d = new DateTime($str);
if ($d->format('H:i A j-M') != $str) {
    echo 'Date is invalid';
}
您需要将代码转换为使用非对象版本日期函数。但是,这仅在您希望使用某种格式时有效


很抱歉编辑了。这是我的第一篇博文。

逻辑地思考一下。假定的“9月31日”的时间戳将相当于“10月1日”,因为这仅仅是自新纪元以来的秒数。你的
checkdate()
函数是完全无用的,句号,因为如果它是时间戳,它总是一个有效的日期。你可以做的一件事是让他们确认他们所指的日期。请参阅的演示“上面键入一个日期”,以了解其外观示例。假定的“9月31日”的时间戳将相当于“10月1日”,因为这仅仅是自新纪元以来的秒数。你的
checkdate()
函数是完全无用的,句号,因为如果它是时间戳,它总是一个有效的日期。你可以做的一件事是让他们确认他们所指的日期。请参阅的演示“在上面键入日期”,以获取有关其外观的示例。