2014-12-04 139 views
1
$todaysDate = date("Y-m-d"); 
$maxBookingDate=strtotime('+2 weeks', $todaysDate); 
$dateEntered = DateTime::createFromFormat('d/m/Y', $_POST["Date"]); 
$tableDate =$dateEntered->format('Y-m-d'); 
if ($tableDate < $todaysDate){ 
    echo "Date must be in the future"; 
} 
if ($tabledate > $maxBookingDate){ 
    echo "Date must be no more than 2 weeks in advance"; 
} 

日期比較,以確保用戶進入日期不超過兩週提前沒有工作,我做了什麼錯了?PHP日期比較(2周)

+2

strtotime需要一個int作爲第二個參數,但$ todaysDate已經做了一個字符串。 – 2014-12-04 10:00:13

+0

我會正確使用微時間和轉換我認爲... – MadsBjaerge 2014-12-04 10:01:26

+0

date()返回字符串,strtotime()接受int作爲第二個參數,這是一個時間戳。 比較日期時,可以使用時間戳,即int,但不會比較兩個日期字符串。 – 2014-12-04 10:14:05

回答

0

你可以使用DateTime類都通過了,使得其更容易地比較:

$todaysDate = new DateTime(); 
$maxBookingDate = new DateTime('+2 weeks'); 
$dateEntered = DateTime::createFromFormat('d/m/Y', $_POST['Date']); 
if ($dateEntered < $todaysDate){ 
    echo "Date must be in the future"; 
} elseif ($dateEntered > $maxBookingDate){ 
    echo "Date must be no more than 2 weeks in advance"; 
} 

在您的代碼:

$todaysDate是一個字符串,你餵它裏面strtotime()作爲你的第二個參數這是不正確的用法。第二個參數需要數值(時間戳)。

在你的if語句中,你正在比較字符串。您應該將它們作爲時間戳或DateTime對象進行比較,如上面的答案。