2012-07-11 149 views
2

我的服務器使用的是舊版本的PHP,因此我不能使用$ datetime1-> diff($ datetime2)方法。TIMESTAMPDIFF在MYSQL中計算兩個日期之間的月數#

我目前使用下面的代碼,但它並沒有真正的工作:

$from = explode("-",date("Y-m-d",$recurring_invoices->start_date)); 
$to = explode("-",date("Y-m-d",$to_time)); 
$months = ($to[0]-$from[0])*12+$to[1]-$from[1]; 

它將計算7月30日至6月1日作爲一個整整一個月。它應該只計算從7月1日到6月1日爲止的整個月份。

我注意到有一個MYSQL TIMESTAMPDIFF函數,但我似乎無法讓它工作。

$query = "SELECT TIMESTAMPDIFF(MONTH,'$recurring_invoices->start_date','$from_time')"; 
print_r($this->queryResult($query)); 

$query = "SELECT TIMESTAMPDIFF(MONTH, from_date, to_date) FROM agenda"; 
print_r($this->queryResult($query)); 

你的幫助深表感謝!

+0

所以,你要的是有兩個指定的日期之間經過的整月數?那麼1個月和10天= 1,26天= 0等等等等? – DaveRandom 2012-07-11 21:39:47

+0

DaveRandom,是的!究竟。這是一個好方法。我顯然不是有言語的人。 – steeped 2012-07-11 21:42:52

回答

1

我認爲這應該工作, ,但它是未經測試 現在tested固定:

list($startYear, $startMonth, $startDay) = explode('-', date('Y-n-j', $recurring_invoices->start_date)); 
list($endYear, $endMonth, $endDay) = explode('-', date('Y-n-j', $to_time)); 

$months = 0; 
$months += ($endYear-$startYear) * 12; 
$months += $endMonth - $startMonth; 
if ($startDay > $endDay) { 
    $months -= 1; 
} 

echo $months; 
+0

我不得不稍微修改你的代碼,因爲它沒有完全工作,但是因爲我看到了你設置邏輯的方式,所以我能夠做到!它的工作原理!謝謝一堆! – steeped 2012-07-11 22:15:17

+0

'list($ startYear,$ startMonth,$ startDay)= explode(' - ',date('Y-n-j',$ recurring_invoices-> start_date)); list($ endYear,$ endMonth,$ endDay)= explode(' - ',date('Y-n-j',$ to_time)); $ months = 0; $ months + =($ endYear- $ startYear)* 12; $ months + = $ endMonth - $ startMonth; if($ startDay> $ endDay){ $ months = $ months - 1; }' – steeped 2012-07-11 22:19:41

+1

@steeped我只是在我抽菸的時候意識到自己的錯誤。我將用您的代碼編輯未來訪問者的答案。 – DaveRandom 2012-07-11 22:22:53

相關問題