Инкремент даты

Тема в разделе "PHP", создана пользователем latteo, 30 июл 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.549
    Симпатии:
    1.431
    Необходимо перебрать все дни скажем с 2000-02-12 до 2010-07-30
    не составит большого труда написать цикл с 2мя вложенными циклами + масив с зависимостью месяц-количество дней + проверка высокосного, но может это можно сделать более просто?
     
  2. diavolic

    diavolic

    Регистр.:
    17 мар 2010
    Сообщения:
    522
    Симпатии:
    102
    пример добавления одного дня:

    PHP:
    $today="2007-02-28";
    $nextday=strftime("%Y-%m-%d"strtotime("$today +1 day"));
     
    latteo нравится это.
  3. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    так короче
    PHP:
    $start mktime(0002122000);
    $end mktime(0007202010);

    $month = array();
    $year = array();
    while(
    $start<=$end){
        echo 
    date("Y-m-d H:i:s"$start).'<br>';
        
    $start mktime(000date("m"$start), date("d"$start)+1date("Y"$start));
        
    $month[date("Y"$start)][date("m"$start)]=date("t"$start);
        
    $year[date("Y"$start)]=date("L"$start);
    }
    print_r($month);
    print_r($year);
    а так быстрее
    PHP:
    $start mktime(0002122000);
    $end mktime(0007202010);

    $month = array(array());
    $year = array();
    while(
    $start<=$end){
        echo 
    date("Y-m-d H:i:s"$start).'<br>';
        
    $start mktime(000date("m"$start), date("d"$start)+1date("Y"$start));
    }

    $start mktime(0002122000);
    $month = array();
    while(
    $start<=$end){
        echo 
    date("Y-m-d H:i:s"$start).'<br>';
        
    $month[date("Y"$start)][date("m"$start)]=date("t"$start);
        
    $start mktime(000date("m"$start)+1date("d"$start), date("Y"$start));
    }
    print_r($month);

    $start mktime(0002122000);
    $year = array();
    while(
    $start<=$end){
        echo 
    date("Y-m-d H:i:s"$start).'<br>';
        
    $year[date("Y"$start)]=date("L"$start);
        
    $start mktime(000date("m"$start), date("d"$start), date("Y"$start)+1);
    }

    print_r($year);
     
    latteo нравится это.
  4. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.549
    Симпатии:
    1.431
    Благодарю!
    Полностью решение будет такое?

    PHP:
    <?php
    $nextday
    ="2000-02-12";
    $lastday "2010-07-30";
     echo 
    $nextday."\n";
     
    for (
    $i=0;$nextday $lastday ;$i++){

        
    $nextday=strftime("%Y-%m-%d"strtotime("$nextday +1 day"));
        echo 
    $nextday."\n";
    }

    ?>
    Для обычного php все работает хотя точность не проверял, но похоже на правду:)

    Но забавно то, что при запуске такого скрипта через cmd.exe при том что для *.php прописана асоциация на php-gtk2 выдает запрос на смену системного времени:
    UPD: спасибо polyetilen твой скрипт больше подходит для контекста в котором будет применятся.
     
  5. venetu

    venetu

    Регистр.:
    28 мар 2007
    Сообщения:
    737
    Симпатии:
    263
    Жесть, ну вы поцоны доете...
    PHP:
    $time strtotime('2000-02-12');  
    while(
    $time<strtotime('2010-07-30')) {
      echo 
    date('Y-m-d'$time) . "<br>\n";
      
    $time += 24*60*60;    // секунд в одном дне
    }
    Все. Три строчки. А с for вместо while будет вообще одна.
     
    Raccoon и latteo нравится это.
  6. Raccoon

    Raccoon

    Регистр.:
    31 июл 2007
    Сообщения:
    176
    Симпатии:
    9
    Да, Венетто правильно написал )) там делов-то

    а зачем тебе набор дат, не в мускул случайно собрался их пихать?
     
  7. Tretiy

    Tretiy Постоялец

    Заблокирован
    Регистр.:
    10 дек 2007
    Сообщения:
    81
    Симпатии:
    9
    Да, если мускул, то лучше им самим и делать такой перебор.
     
  8. Raccoon

    Raccoon

    Регистр.:
    31 июл 2007
    Сообщения:
    176
    Симпатии:
    9
    Я имел ввиду, что в MySQL есть функции для работы с датой, которые удовлетворяют 90% стандартных запросов. Быстрее и правильнее, чем строить выбор через PHP.
     
  9. venetu

    venetu

    Регистр.:
    28 мар 2007
    Сообщения:
    737
    Симпатии:
    263
    Быстрее дергать мускул, чтобы получить дату? Правильнее?
     
  10. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.549
    Симпатии:
    1.431
    Нет не в мускул, надо несколько сайтов выкачать в url которых дата проскальзывает и распарсить. Соответсвенно из скрипта перебора дат должно легко извлекатся значение год, месяц, день.

    Просто сложилось как то, что с функциями для работы с датой не дружу :( Так что большое спасибо отписавшимся за примеры.:az:
     
Статус темы:
Закрыта.