2010-09-04 3 views
0

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

Хотелось бы найти ранее существовавший, если он есть.

Спасибо!

ответ

2

Вот грубый старт:

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

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

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

+0

ничего себе - это выглядит потрясающе. К сожалению, мой скрипт должен поддерживать более низкие версии PHP: / –

0

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

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

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

Смежные вопросы