Я делаю несколько больших итераций списка временных меток: помещаю их в таблицы с диапазонами дат и группирую их по диапазонам.
Для этого я нашел 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!), Которые предлагают более совершенные маршруты для согласованных, безопасных для летнего времени и безопасных диапазонов дат високосного года?