Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Вывод всех дат между двумя датами
Форумы портала PHP.SU » » Хранение данных, их вывод и обработка » Вывод всех дат между двумя датами

Страниц (1): [1]
 

1. grefon - 30 Мая, 2011 - 17:14:56 - перейти к сообщению
Возникла задача вывести все даты, которые находятся к примеру между 2011.04.07 и 2011.08.01. Сходу придумал вот такой вариант:
PHP:
скопировать код в буфер обмена
  1. $date_1 = '2011.04.07';
  2. $date_2 = '2011.08.01';
  3.  
  4. $date_temp_1 = explode('.',$date_1);
  5. $date_temp_2 = explode('.',$date_2);
  6.  
  7. $date_1 = mktime(0, 0, 0, $date_temp_1[1], $date_temp_1[2], $date_temp_1[0]);
  8. $date_2 = mktime(0, 0, 0, $date_temp_2[1], $date_temp_2[2], $date_temp_2[0]);
  9.  
  10. do {
  11.  
  12.         echo date('Y.m.d',$date_1).'<br/>';
  13.         $date_1 += 86400;
  14.  
  15. } while ($date_1 < $date_2+86399);
  16.  

Все работает как надо. Возник вопрос, может можно тоже самое сделать как-то более просто и оптимально?
2. EuGen - 30 Мая, 2011 - 17:38:49 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2. function getInterval($start, $end, $format='Y-m-d')
  3. {
  4.    return array_map(create_function('$item', 'return date("'.$format.'", $item);'),range(strtotime($start), strtotime($end), 60*60*24));
  5. }
  6.  
  7. $start='2011-04-07';
  8. $end='2011-08-01';
  9.  
  10. var_dump(getInterval($start, $end));
  11.  

Что же поделать, опять create_function - ну, нравятся мне лямбда-функции
3. grefon - 30 Мая, 2011 - 17:49:05 - перейти к сообщению
Да, интересный вариант. Я как-то про create_function и range даже не подумал. Спасибо.

PS. Время генерации в обоих вариантах одинаковое.
4. EuGen - 30 Мая, 2011 - 17:50:39 - перейти к сообщению
Насчет оптимальности - скорее всего Ваш вариант еще и быстрее будет (это если create_function интерпретируется, как, скажем, eval() - но я не могу сказать точно).
Насчет простоты - возможно, мой вариант просто короче.

 

Powered by ExBB FM 1.0 RC1