2011-09-21 78 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'; 
} 

你需要的代碼轉換爲使用非對象版本日期函數。但是,這隻適用於您期待某種格式。

對編輯感到抱歉。這是我的第一篇文章。