我正在做一些大的时间戳列表迭代:将它们放在带有 date-ranges 的表中,并按范围对它们进行分组。为了做到这一点,我发现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.
代替strtotime()
,我可能会找出一周开始和结束之间的秒数,99% 的时间是24 * 60 * 60 * 7
。但是在这些极少数情况下,有一个 DST 开关,那个 24 应该是 23 或 25。解决这个问题的代码可能会慢很多strtotime()
,不是吗?
我对年、月(几个月,非常不一致!)、天和小时的范围使用相同的模式。只有几个小时,我才会怀疑简单地添加3600
时间戳会更快。
还有其他陷阱吗?有没有办法(不依赖于 PHP5.3!)为一致的、DST 和闰年的安全日期范围提供更好的路线?