2011-10-06 37 views
0

我正試圖寫一個函數,它將盡快返回兩個日期之間的天數。這個函數在我的代碼中被調用 成千上萬個 ,並且將它優化爲max會非常有幫助。日期是格式爲yyyy-mm-dd的字符串。有效的PHP日期比較

這裏是最好的我到目前爲止:

protected function daysBetween($date1, $date2) 
{ 
    list($year1,$month1,$day1) = explode('-',$date1); 
    list($year2,$month2,$day2) = explode('-',$date2); 
    return (int)abs((mktime(0,0,0,$month1,$day1,$year1) - 
        mktime(0,0,0,$month2,$day2,$year2))/86400); 
} 

我怎樣才能讓這個執行在儘可能短的時間最短?

+0

但它是重複的嗎?另一個問題與迄今爲止的日期時間進行比較,而不關心效率。這個只關心效率,因爲作者顯然已經有了解決日期增量的解決方案。無論如何lyoshenka,我想不出一個更好的方法。 mktime幾乎肯定比strtotime快,而且不使用mktime的解決方案也可能會更慢。我想你明白了。 – Kasapo

+0

@AurelioDeRosa這個問題是不同的。你鏈接到的人只是想知道如何去做,但是這個人想知道如何以最快的方式做到這一點。 – Bojangles

+0

你看過http://www.php.net/manual/en/datetime.diff.php嗎?人們會希望這會更有效率...... – Aerik

回答

1

mktime()更改爲gmmktime()可以減少超過50%的時間對我來說。這是我能看到的最大的改進*。

*我看起來不太難。 SO似乎並不適合調整你的功能,腳本,硬件,個人需求,尤其是因爲它只叫千次次。

+0

謝謝,這真的很好。當我說「一千次」時,我的意思是「一百萬次」。我當時並沒有真正分析代碼,但我知道那是罪魁禍首。 –

+0

回想起來,這是非常令人驚訝的。 gmmktime的php手冊頁說它在內部使用mktime。所以gmmktime似乎不可能比mktime更快。但它絕對是爲我(和你)。我想知道這可以是... –