TIMESTAMPDIFF在MYSQL中计算两个日期之间的月数#

问题描述:

我的服务器使用的是旧版本的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

我认为这应该工作, ,但它是未经测试 现在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