ber*_*kes 2 php datetime date-range strtotime
我正在做一些大的时间戳列表迭代:将它们放在具有日期范围的表中,并按范围对它们进行分组.为了做到这一点,我发现strtotime()了一个非常有用的功能,但我担心它的性能.
例如,一个循环遍历周列表的函数(例如,第49周到第05周),并且必须决定一周的开始和该周末的时间戳.一个有用的方法,将是:
foreach ($this->weeks($first, $amount) as $starts_at) {
$ends_at = strtotime('+1 week', $starts_at);
$groups[$week_key] = $this->slice($timestamps, $starts_at, $ends_at);
}
//$this->weeks returns a list of timestamps at which each week starts.
//$this->slice is a simple helper that returns only the timestamps within a range, from a list of timestamps.
Run Code Online (Sandbox Code Playgroud)
而不是strtotime(),我可以,可能,找出开始和一周结束之间的秒数,99%的时间24 * 60 * 60 * 7.但是在这些罕见的情况下,有一个DST开关,24应该是23或25.代码排序,可能会慢很多strtotime(),不是吗?
我使用相同的模式,包括年,月(月,非常不一致!),天和小时.只有几个小时,我怀疑只是添加3600到时间戳更快.
还有其他的问题吗?有没有方法(不依赖于PHP5.3!)为一致,DST和闰年安全日期范围提供更好的路径?
irc*_*ell 10
你为什么担心它的表现?你有证据表明你的系统正在放慢速度吗?如果没有,请不要因为不必要的原因而过度复杂化解决方案.记住这一点premature optimization is the root of all evil.编写有意义的可读代码,并且只有在您知道它将成为一个问题时才进行优化...
但是要考虑的其他事情是它也编译了C代码,所以它应该非常有效.您可能能够在PHP中构建代码的子集并使其更快,但这将是一项艰巨的工作(由于PHP代码中涉及的所有开销).
就像我之前说的那样,使用它直到你证明它是一个问题,然后解决这个问题.不要忘记重写它,因为你的需求也不是免费的.这需要时间并引入错误.如果增益最小(这意味着它不是一个性能问题),是否值得.因此,除非你知道它是一个问题,否则不要费心去尝试微量优化......