2013-09-24 142 views
3

我想寫一個php代碼,它將能夠減去兩個日期並獲得兩個日期之間的天數。我想出的代碼如下減去日期以獲得天數

<?php 
$c_date = date("Y-m-d"); 
//Subtracting two dates. 
$date1 = new DateTime($d_date); //$d_date gets its value from database which i havent shown here 
$date2 = new DateTime($c_date); 
$interval = $date1->diff($date2); 
echo "difference " . $interval->y . " years, " . $interval->m." months, ".$interval->d." days "; 
?> 

現在上面的代碼工作,但我無法使用它來適應我的需要。我需要能夠查明交貨日期($ d_date)是否在距離當前日期5天內,如果是這種情況,則返回值1。

所以,如果$c_date = "2013-09-24"$d_date = "2013-09-30"然後我將回到1 但麻煩的是,當說的交貨日期是「2013年9月19日」交貨日期早已過去,我應該返回0,但與目前的代碼在一天中的差異仍然是5,所以我會返回1這是錯誤的。

對如何解決這個問題有什麼想法嗎?

+2

添加一個if語句首先比較日期(哪一個更大等),然後使用5天差異的邏輯? – Maximus2012

+0

你的代碼在哪裏返回任何東西?這只是印出差異。 – andrewsi

+0

我還沒有顯示回報,因爲麻煩與日期差異,它不能區分較大和較短的日期,因此從較高的日期減去較低的日期也是積極的,這正在搞砸 –

回答

0

好了,所以這裏是必需的代碼,如Maximus2012建議,使用if語句比較的日期第一次做的工作。所以這裏是代碼

$date1 = new DateTime($ddate[$counter]); 
       $date2 = new DateTime($c_date); 
       if($date2>$date1) 
       { 
        $stat = 0; 
       } 
$interval = $date1->diff($date2); 
       $d_diff = $interval->d; 
if($d_diff>5) 
{ 
$stat = 0; 
} 
0

我想你想要的天數過去了。如果是這樣使用:

$interval = $date1->diff($date2)->days; 
-1

試試這個:d

function dateInterval($current, $delivery, $days){ 
    $unixCurrent = strtotime($current); 
    $unixDelivery = strtotime($delivery); 
    if ($unixCurrent === false || $unixDelivery === false){ 
     return -2; 
    } 
    if ($unixCurrent > $unixDelivery){ 
     return -1; 
    } else if ($unixCurrent+($days*86400) > $unixDelivery){ 
     return 1; 
    } else { 
     return 0; 
    } 
} 
+0

這個解決方案看起來所以不知道爲什麼它被低估了。您是否嘗試運行不同情況下的代碼以查看它是否提供了正確的輸出?無論哪種情況,在其他解決方案中都有更有效的方法來實現此目的。 – Maximus2012

+0

我知道有更好的方法來做到這一點,但這一個作品我寫得很快,但很有用,idk爲什麼我被壓低了。 –

1

您可以比較兩個日期時間對象,並檢查交貨日期是否大於當前日期,並相應地繼續。

作爲一個功能:

function check_date($d_date, $c_date) 
{ 
    if($d_date > $c_date) { 
     $date1 = new DateTime($d_date); //$d_date gets its value from database which i havent shown here 
     $date2 = new DateTime($c_date); 
     $interval = $date1->diff($date2); 
     return "difference " . $interval->y . " years, " . $interval->m." months, ".$interval->d." days "; 
    } 
    else { 
     return false; 
    } 

} 

測試用例

var_dump(check_date('2013-09-30', '2013-09-24')); 
var_dump(check_date('2013-09-19', '2013-09-24')); 

輸出:

string(37) "difference 0 years, 0 months, 6 days " 
bool(false) 

Demo!

2

試試這個:

$interval = $date2->diff($date1); 
$returnValue = $interval->d <= 5 && !$interval->invert; 

$returnValue將是truefalse(布爾型)。

編輯:
準確地說 - 要將其評估爲10你可以做

$returnValue = (int) ($interval->d <= 5 && !$interval->invert); 

編輯#2:如果
$interval->invert是財產告訴你$date2之間的差異$date1是負數(1)或正數(0)。這是令人困惑 - 在diff法的計算總是第二對象(方法參數)減去第一對象(方法被叫方),所以如果假想

$date1 > $date2 

爲真,那麼

$date1->diff($date2) 

是否定的(在一個捷徑)。

+1

做什麼!$ interval-> invert做什麼? – Maximus2012

+1

它告訴你日期之間的差異是負數(1)還是正數(0)。 – matewka

+0

感謝您的更新。我認爲這是一個有效的解決方案。 – Maximus2012