如何通过在PHP中给出日期来识别偶数或星期六

时间:2015-11-05 11:07:07

标签: php

我想计算两个日期之间的总工作日数。 在这里,我们将第二个和第四个星期六作为工作日(即所有偶数星期六被视为假日) 我可以使用以下代码

获取特定日期的日期
$day = ‘2015-11-07’;
$dayName = date("l",strtotime($day));

if ($dayName =='saturday') {
    ...
}

然后我必须找出该特定日期是否属于11月的第一个星期六或第二个星期六。 这样做有什么选择吗?

我有代码来计算不包括所有星期六,星期日和节假日的总天数。我从another question

获得了该代码

但是我想要识别星期六,我会在星期六发现总天数。

2 个答案:

答案 0 :(得分:0)

你走了:

<?php
$day = '2015-11-14';
$timestamp = strtotime($day);
$dayOfWeek = date('w', $timestamp); //0-6, 6 = Saturday
$dayOfMonth = date('j', $timestamp); //1-31
$weekNum = ceil($dayOfMonth / 7); //round up to get the week number

if ($dayOfWeek == 6) { //first check the day of the week is a Saturday
    if ($weekNum % 2 == 0) { //check that the week number is even
        print("Even Saturday");
    } else {
        print("Odd Saturday");
    }
} else {
    print("Other day");
}
?>

答案 1 :(得分:0)

获取两个终点之间的所有日子,然后将逻辑应用于每个终点,累积匹配的那些:

function work_days_between_two_dates(\DateTime $begin, \DateTime $end) {
    $workdays = [];
    $all_days = new DatePeriod($begin, new DateInterval('P1D'), $end->modify('+1 day'));
    foreach ($all_days as $day) {
        $dow = (int)$day->format('w');
        $dom = (int)$day->format('j');
        if (1 <= $dow && $dow <= 5) { // Mon - Fri
            $workdays[] = $day;
        } else if (6 == $dow && 0 == $dom % 2) { // Even Saturday
            $workdays[] = $day;
        }
    }
    return $workdays;
}

Live example

对于2015年11月(11/1和12/1之间的日期),此算法将以下内容标记为工作日:

    November 2015
Su Mo Tu We Th Fr Sa
 -  2  3  4  5  6  -
 -  9 10 11 12 13 14
 - 16 17 18 19 20 -
 - 23 24 25 26 27 28
 - 30