2011-09-21 38 views
1

我使用strtotime解析就是喜欢10:24 AM 22-Sep日期当时我parseing这个直通checkdate的strtotime()

$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

想想这个逻辑上。假设'9月31日'的时间戳将相当于'10月1日',因为它仅仅是自纪元以来的秒数。你的'checkdate()'函数是完全没用的,因为如果它是一个时间戳,*它总是一个有效的日期*。 – animuson

+0

你可以做的一件事是让他们确认他们的意思。请参阅http://www.datejs.com/上的演示“在上面键入日期”,以了解它的外观。 – artlung

回答

2

strtotime()不具有内置的日期验证,所以如果你需要它 - 它执行手动

PS:这是错误的写作date(n,$pickup_time)。只要n是一个字符串 - 把它放在引号内:date('n', $pickup_time)

1

你应该能够使用的strtotime()来检查有效日期?

不,strtotime()的意图是做最好的PHP可以做的解释你的意思是什么日期。从php.net的简短描述:

解析任何英文文本的日期时间描述为Unix 时间戳

如果字符串是没有意义的,strtotime()仍然会对其进行解析。有时它会出现垃圾,但这实际上是关于如何接受来自用户的输入。

1

您可以将字符串转换为一个日期,然后将其格式化为您在读过的格式相匹配的字符串。如果字符串不匹配,则该日期是无效的。

例如:

$str = '10:24 AM 22-Sep'; 
$d = new DateTime($str); 
if ($d->format('H:i A j-M') != $str) { 
    echo 'Date is invalid'; 
} 

你需要的代码转换为使用非对象版本日期函数。但是,这只适用于您期待某种格式。

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