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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Вывод всех дат между двумя датами

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
grefon
Отправлено: 30 Мая, 2011 - 17:14:56
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 823
Дата рег-ции: Нояб. 2010  


Помог: 32 раз(а)




Возникла задача вывести все даты, которые находятся к примеру между 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.  

Все работает как надо. Возник вопрос, может можно тоже самое сделать как-то более просто и оптимально?


-----
____________________________________________________________________
Ну как то так, наверное.
http://grefon[dot]com
 
 Top
EuGen Администратор
Отправлено: 30 Мая, 2011 - 17:38:49
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




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 - ну, нравятся мне лямбда-функции


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
grefon
Отправлено: 30 Мая, 2011 - 17:49:05
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 823
Дата рег-ции: Нояб. 2010  


Помог: 32 раз(а)




Да, интересный вариант. Я как-то про create_function и range даже не подумал. Спасибо.

PS. Время генерации в обоих вариантах одинаковое.


-----
____________________________________________________________________
Ну как то так, наверное.
http://grefon[dot]com
 
 Top
EuGen Администратор
Отправлено: 30 Мая, 2011 - 17:50:39
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Насчет оптимальности - скорее всего Ваш вариант еще и быстрее будет (это если create_function интерпретируется, как, скажем, eval() - но я не могу сказать точно).
Насчет простоты - возможно, мой вариант просто короче.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Хранение данных, их вывод и обработка »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB