Я делаю несколько больших итераций списка временных меток: помещаю их в таблицы с диапазонами дат и их группировка по диапазонам. Для этого я нашел 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!), которые предлагают лучшие маршруты для согласованных, летних и безопасных диапазонов дат?
premature optimization is the root of all evil
. Пишите читаемый код, который имеет смысл, и оптимизируйте только в том случае, если вы ЗНАЕТЕ, что это будет проблемой...- - person ircmaxell   schedule 11.10.2010