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

Статус
В этой теме нельзя размещать новые ответы.

latteo

Эффективное использование PHP, MySQL
Регистрация
27 Фев 2008
Сообщения
1.603
Реакции
1.565
Необходимо перебрать все дни скажем с 2000-02-12 до 2010-07-30
не составит большого труда написать цикл с 2мя вложенными циклами + масив с зависимостью месяц-количество дней + проверка высокосного, но может это можно сделать более просто?
 
пример добавления одного дня:

PHP:
$today="2007-02-28";
$nextday=strftime("%Y-%m-%d", strtotime("$today +1 day"));
 
так короче
PHP:
$start = mktime(0, 0, 0, 2, 12, 2000);
$end = mktime(0, 0, 0, 7, 20, 2010);

$month = array();
$year = array();
while($start<=$end){
    echo date("Y-m-d H:i:s", $start).'<br>';
    $start = mktime(0, 0, 0, date("m", $start), date("d", $start)+1, date("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(0, 0, 0, 2, 12, 2000);
$end = mktime(0, 0, 0, 7, 20, 2010);

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

$start = mktime(0, 0, 0, 2, 12, 2000);
$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(0, 0, 0, date("m", $start)+1, date("d", $start), date("Y", $start));
}
print_r($month);

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

print_r($year);
 
Благодарю!
Полностью решение будет такое?

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 выдает запрос на смену системного времени:
The system cannot accept the date entered.
Enter the new date: (dd-mm-yy)

UPD: спасибо polyetilen твой скрипт больше подходит для контекста в котором будет применятся.
 
Жесть, ну вы поцоны доете...
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 будет вообще одна.
 
Да, Венетто правильно написал )) там делов-то

а зачем тебе набор дат, не в мускул случайно собрался их пихать?
 
  • Заблокирован
  • #7
Да, если мускул, то лучше им самим и делать такой перебор.
 
Я имел ввиду, что в MySQL есть функции для работы с датой, которые удовлетворяют 90% стандартных запросов. Быстрее и правильнее, чем строить выбор через PHP.
 
Я имел ввиду, что в MySQL есть функции для работы с датой, которые удовлетворяют 90% стандартных запросов. Быстрее и правильнее, чем строить выбор через PHP.
Быстрее дергать мускул, чтобы получить дату? Правильнее?
 
Да, Венетто правильно написал )) там делов-то
а зачем тебе набор дат, не в мускул случайно собрался их пихать?
Нет не в мускул, надо несколько сайтов выкачать в url которых дата проскальзывает и распарсить. Соответсвенно из скрипта перебора дат должно легко извлекатся значение год, месяц, день.

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