Существующий скрипт для циклического перебора диапазона дат по дням, неделям, месяцам, годам? - PullRequest
0 голосов
/ 04 сентября 2010

Я пытаюсь найти существующую вспомогательную функцию, которая будет принимать начальную и конечную дату и интервал (день, неделя, месяц, год) и будет возвращать массив каждый день, недельный месяц или год в этом диапазоне.

Хотел бы найти уже существующий, если он там есть.

Спасибо!

Ответы [ 3 ]

2 голосов
/ 05 сентября 2010

Вот грубое начало:

function makeDayArray( $startDate , $endDate ){
 // Just to be sure - feel free to drop these is your sure of the input
  $startDate = strtotime( $startDate );
  $endDate   = strtotime( $endDate );

 // New Variables
  $currDate  = $startDate;
  $dayArray  = array();

 // Loop until we have the Array
  do{
    $dayArray[] = date( 'Y-m-d' , $currDate );
    $currDate = strtotime( '+1 day' , $currDate );
  } while( $currDate<=$endDate );

 // Return the Array
  return $dayArray;
}
1 голос
/ 04 сентября 2010

В PHP 5.3 и более поздних версиях вы можете использовать класс DateInterval для этого

http://www.php.net/manual/en/class.dateinterval.php

0 голосов
/ 27 февраля 2013

Я нашел эту ветку, когда искал ту же самую вещь. Вот то, что я придумал, это отлично сработало.

У меня была база адресов электронной почты и отметок времени Unix, когда они подписывались на список рассылки. Я хотел посмотреть, какой был еженедельный тариф подписки.

$startdate = 1325376000; // Jan 1 2012
//$startdate = 1293926400; // Jan 1 2011
$currentstart = $startdate;
$currentend = $startdate + 604800; // 604800 = 1 week

while($currentend < 1356998400) {
    $sql = "SELECT * FROM the_table WHERE unixdate > $currentstart AND unixdate <= " . ($currentstart + 604800 - 1);
    $result = mysql_query($sql);
    echo date('D Y-m-d', ($currentstart)) . " - " .  date('D Y-m-d', ($currentstart + 604800 - 1)) . ": <strong>" . mysql_num_rows($result) . "</strong><br />";
    $currentstart = $currentend;
    $currentend += 604800;
}

Вы можете изменить номер 604800, чтобы сделать интервалы 30 дней или 365 дней или ежедневно или что-то еще.

Я уверен, что это не красиво - я не лучший кодер - но мне пришлось оставить свое решение для тех, кто идет за мной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...