2016-10-27 64 views
0

我需要檢查date1是今天還是未來日期,如果是的話,那麼它確定 如果不是(過去)它不好。我看到很多例子,但沒有一個主題是檢查date1今天是否相等。 我的代碼是:檢查新的DateTime是否是今天或未來在php

$today = new DateTime(); // Today 
$today->format('Y-m-d'); //2016-10-27 
$contractDateBegin = new DateTime($date1); //2016-10-27 

if($today->getTimestamp() <= $contractDateBegin->getTimestamp()){ 
    echo 'OK'; 
} 
else{ 
    echo "NOT OK"; 
} 

其正常工作,如果DATE1是一個將來的日期,但如果同日它的回聲「不OK」

任何幫助嗎?

+0

我認爲一個簡單的大於符號應該削減它。如果($ today-> getTimestamp()> $ contractDateBegin-> getTimestamp()){0}回顯'OK'; } else {do stuff} –

+1

您的'$ today'也考慮到了時間。使用'$ today = new DateTime('today midnight')'通過強制時間部分爲0來解決此問題(此時您可以執行$ today <= $ contractDateBegin')。不知道是否有更好的選擇。 –

+0

謝謝你斯特林的工作就像一個魅力。 – tizmantiz

回答

0

「Y-m-d格式」也適用於字符串的直接字典對比,並且不需要將其轉換爲DateTime對象。隨着PHP7你可以使用著名的speceship operator;)

php -a 
Interactive mode enabled 

php > $today = '2016-10-27'; 
php > $tomorrow = '2016-10-28'; 
php > $today2 = '2016-10-27'; 

php > echo $today <=> $tomorrow; 
-1 
php > echo $today <=> $today2; 
0 
php > echo $tomorrow <=> $today2; 
1 
0

getTimestamp()包括 「H:我:■」。所以在比較秒數時會失敗。 在你的情況下,你想比較剛剛的日期('Y-m-d')嗎? 如果您只是想使用DateTime並比較時間戳。請嘗試

$today = new DateTime(); // Today 
$contractDateBegin = new DateTime($date1); //2016-10-27 

// Set time to 0 
$today->setTime(0, 0, 0); 
$contractDateBegin->setTime(0, 0, 0); 

if($today->getTimestamp() <= $contractDateBegin->getTimestamp()){ 
    echo 'OK'; 
} 
else{ 
    echo "NOT OK"; 
} 
+0

你好Tam Nguyen你的解決方案正在努力......謝謝。 – tizmantiz

0

$today可以定義爲只是new DateTime("today"),這意味着今天午夜 - 時間部分將被自動清零

$today = new DateTime("today"); 
$date1 = '2016-10-27'; 
$contractDateBegin = new DateTime($date1); //2016-10-27 
if($today <= $contractDateBegin){ 
    echo 'OK'; 
} 
else{ 
    echo "NOT OK"; 
} 

DEMO

+0

你好Manh Nguyen它的工作非常好,謝謝。 – tizmantiz

0

我只是想你想要比較日期(忽略時間)。這應該工作:

$today = new DateTime(); 
$today = $today->format('Y-m-d'); 
$contractDateBegin = new DateTime($date1); 
$contractDateBegin = $contractDateBegin->format('Y-m-d'); 

if ($today <= $contractDateBegin){ 
    echo 'OK'; 
} else { 
    echo "NOT OK"; 
} 
+0

@Downvoter請解釋 – simon

+0

你測試了你告訴OP「應該工作」的代碼嗎?調用'format'不會改變對象。 –

+0

@JonSrrrling我的錯。我真正想要的是重新分配變量。 – simon

相關問題