【问题标题】:Efficient PHP date comparison高效的 PHP 日期比较
【发布时间】:2011-10-06 21:35:48
【问题描述】:

我正在尝试编写一个函数,该函数将尽快返回两个日期之间的天数。这个函数在我的代码中被调用了数千次​​trike>一百万次,将它优化到最大值将非常有帮助。日期是格式为yyyy-mm-dd 的字符串。

这是我迄今为止最好的:

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);
}

我怎样才能在尽可能短的时间内完成这项工作?

【问题讨论】:

  • 但它是重复的吗?另一个问题比较 datetime 到 date,并且不关心效率。这个只关心效率,因为作者显然已经有了一个解决方案来获取日期增量。无论如何,lyoshenka,我想不出更好的方法。 mktime 几乎肯定比 strtotime 快得多,而且不使用 mktime 的解决方案也可能会更慢。我想你明白了。
  • @AurelioDeRosa 这个问题是不同的。您链接到的人只是想知道如何 去做,但是这个人想知道如何以尽可能最快的方式
  • 你看php.net/manual/en/datetime.diff.php了吗?人们希望这会更有效率......

标签: php micro-optimization


【解决方案1】:

mktime() 更改为gmmktime() 将花费的时间减少了50% 以上对我而言。这是我能看到的最大的改进*。

* 我看起来不是很努力。 SO 似乎不是调整功能、脚本、硬件和个人需求的正确位置,尤其是因为它只被调用了数千次

【讨论】:

  • 谢谢,效果很好。当我说“一千次”时,我真正的意思是“一百万次”。当时我还没有真正分析过代码,但我知道那是罪魁祸首。
  • 回想起来,这非常令人惊讶。 gmmktime 的 php 手册页说它在内部使用 mktime。所以 gmmktime 似乎不可能比 mktime 快。但这绝对适合我(和你)。我想知道这怎么可能......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-28
  • 1970-01-01
  • 1970-01-01
  • 2017-01-19
相关资源
最近更新 更多