Вычисление числа суббот и воскресений

Как я могу вычислить число суббот и воскресений между двумя датами в php?

Есть ли с этой целью какая-либо встроенная функция?

10
задан Satish 2 June 2010 в 14:34
поделиться

4 ответа

Здесь уже есть связанный вопрос, Вычислите рабочие дни

Вы можете использовать это для вычитания из 7, чтобы получить выходные дни, или подобное.

5
ответ дан 4 December 2019 в 01:00
поделиться

Я не думаю, что для этого есть встроенная функция, но это должно сработать:

$startTime = START_TIMESTAMP;
$endTime = END_TIMESTAMP;
$time = $startTime;
$count = 0;

while(date('w', $time) != 0) { // 0 (for Sunday) through 6 (for Saturday)
    $time += 86400;
}

while($time < $endTime) {
    $count++;
    $time += 7 * 86400;
}
4
ответ дан 4 December 2019 в 01:00
поделиться

для этого определенно нет встроенной функции, но вы можете использовать strtotime для циклической дней

$start = strtotime('2010-01-01');
$end = strtotime('2010-01-09');

function numWeekdays( $start_ts, $end_ts, $day, $include_start_end = false ) {

    $day = strtolower( $day );
    $current_ts = $start_ts;
    // loop next $day until timestamp past $end_ts
    while( $current_ts < $end_ts ) {

        if( ( $current_ts = strtotime( 'next '.$day, $current_ts ) ) < $end_ts) {
            $days++;
        }
    }

    // include start/end days
    if ( $include_start_end ) {
        if ( strtolower( date( 'l', $start_ts ) ) == $day ) {
            $days++;
        }
        if ( strtolower( date( 'l', $end_ts ) ) == $day ) {
            $days++;
        }
    }   

    return (int)$days;

}

echo numWeekDays( $start, $end, 'saturday', false );
0
ответ дан 4 December 2019 в 01:00
поделиться
<?php
date_default_timezone_set("Europe/Lisbon");
$d1 = new DateTime("2009-06-01"); /* inclusive */
$d2 = new DateTime("2009-07-01"); /* exclusive */

$interval = $d2->diff($d1);
$number_of_days = $interval->format("%d");

$number_of_weekends = $number_of_days / 7;
$remainder = $number_of_days % 7;

if ($remainder >=2 && $d1->format("D") == "Sat")
    $number_of_weekends++;
elseif ($d1->format("w") + $remainder >= 8)
    $number_of_weekends++;

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

0
ответ дан 4 December 2019 в 01:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: