У меня есть эта таблица MySQL
:
desc studentabsence; +---------------------------+-------------+ | Field | Type | +---------------------------+-------------+ | student_id | INT(11) | | student_absence_startdate | date | | student_absence_enddate | date | +---------------------------+-------------+
Предположим, что у нас есть
student_absence_startdate = 2012-08-01
student_absence_enddate = 2012-08-08
Используя PHP, я хотел бы echo
все рабочие дни между этим диапазоном (Mon-Fri).
Из вышеуказанного диапазона я хотел бы напечатать:
2012-08-01
2012-08-02
2012-08-03
2012-08-06
2012-08-07
2012-08-08
Как и где я должен начать это делать?
// Date strings from DB $startDate = '2012-08-01'; $endDate = '2012-08-08'; // Convert to UNIX timestamps $currentTime = strtotime($startDate); $endTime = strtotime($endDate); // Loop until we reach the last day $result = array(); while ($currentTime <= $endTime) { if (date('N', $currentTime) < 6) { $result[] = date('Ym-d', $currentTime); } $currentTime = strtotime('+1 day', $currentTime); } // Show the result // You could loop the array to pretty-print it, or do it within the above loop print_r($result);
Посмотрите, как работает
Это напечатает диапазон дат:
$startDate = '2012-08-01'; $endDate = '2012-08-08'; $date = new DateTime($startDate); while ($date->format('Ym-d') != $endDate) { if ($date->format('N') > 5) { $date->modify('+1 day'); continue; } echo $date->format('Ym-d') . PHP_EOL; $date->modify('+1 day'); } echo $endDate;