У меня $fromdate
и $todate
. Я хочу функцию, которая может рассчитать даты каждого воскресенья, находящиеся между $fromdate
и $todate
в PHP.
Предполагая, что это объекты даты, начинайте с $ fromdate, добавьте к нему один день, пока эта дата не будет в воскресенье, и до тех пор, пока дата до $ todate. Добавьте 7 дней к каждому воскресенью, которое вы найдете, добавьте эту дату и продолжайте, пока новая дата до $ todate. Следите за каждой датой, найденной таким образом.
Используйте эту функцию:
function getDateForSpecificDayBetweenDates($startDate, $endDate, $weekdayNumber) { $startDate = strtotime($startDate); $endDate = strtotime($endDate); $dateArr = array(); do { if(date("w", $startDate) != $weekdayNumber) { $startDate += (24 * 3600); // add 1 day } } while(date("w", $startDate) != $weekdayNumber); while($startDate <= $endDate) { $dateArr[] = date('Ym-d', $startDate); $startDate += (7 * 24 * 3600); // add 7 days } return($dateArr); }
Вызов функции для получения дат для всего воскресенья в 2010 году:
$dateArr = getDateForSpecificDayBetweenDates('2010-01-01', '2010-12-31', 0); print "<pre>"; print_r($dateArr);
Повторное использование:
Array ( [0] => 2010-01-03 [1] => 2010-01-10 [2] => 2010-01-17 [3] => 2010-01-24 [4] => 2010-01-31 [5] => 2010-02-07 ................ ................ ................ [47] => 2010-11-28 [48] => 2010-12-05 [49] => 2010-12-12 [50] => 2010-12-19 [51] => 2010-12-26 )
Попробуй это
function getDateForSpecificDayBetweenDates($start, $end, $weekday = 0){ $weekdays="Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday"; $arr_weekdays=split(",", $weekdays); $weekday = $arr_weekdays[$weekday]; if(!$weekday) die("Invalid Weekday!"); $start= strtotime("+0 day", strtotime($start) ); $end= strtotime($end); $dateArr = array(); $friday = strtotime($weekday, $start); while($friday <= $end) { $dateArr[] = date("Ymd", $friday); $friday = strtotime("+1 weeks", $friday); } $dateArr[] = date("Ymd", $friday); return $dateArr; }
Вот как эта функция может быть вызвана …
$dateArr = getDateForSpecificDayBetweenDates("Today", "+1 year", 0); // 0 Sun, 1 Mon, etc.
$start
и $end
strtotime()
будут принимать все, что поддерживает strtotime()
.
Функции PHPs date () и mktime () должны получить вас там!