2011-10-06 42 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更快。但它绝对是为我(和你)。我想知道这可以是... –