根据所选日期获得最接近的工作日

时间:2016-03-24 14:10:58

标签: php date

我想检查所选日期(例如每月25例)是否是周末。

如果不是周末(周六或周日),则所选日期将保持不变。但如果这一天是周末,所选日期将移至最接近的工作日(周一至周五)。

实施例

2016-03-24 is a Thursday.
2016-03-25 is a Friday.
2016-03-26 is a Saturday.
2016-03-27 is a Sunday.
2016-03-28 is a Monday.

如果这个月的日子是26,那么最接近的工作日是星期五。如果本月的这一天是27,那么最接近的工作日是星期一。等等...

我该如何做到这一点?

4 个答案:

答案 0 :(得分:3)

像这样的东西

function getClosestWeekday($dateString) {
    $date = new DateTime($dateString);
    $weekday = $date->format("N");
    if ($weekday == 6) {
        $date = $date->sub(new DateInterval("P1D"));
    } else if ($weekday == 7) {
        $date = $date->add(new DateInterval("P1D"));
    }
    return $date;
}
var_dump(getClosestWeekday("2016-03-24")); // returns 2016-03-24
var_dump(getClosestWeekday("2016-03-25")); // returns 2016-03-25
var_dump(getClosestWeekday("2016-03-26")); // returns 2016-03-25
var_dump(getClosestWeekday("2016-03-27")); // returns 2016-03-28
var_dump(getClosestWeekday("2016-03-28")); // returns 2016-03-28

你不知道如何做到这一事实并不能证明你没有尝试任何事情。 PHP.net为您提供了至少可以实现这一目标的所有工具。 http://php.net/manual/en/book.datetime.php

答案 1 :(得分:1)

<?php
$day = date('l', strtotime('2009-10-24'));
if($day == 'Saturday'){
  echo 'Friday';
} else if($day == 'Sunday'){
  echo 'Monday';
} else {
  echo $day;
}

希望它有所帮助:)

答案 2 :(得分:0)

所以,为了简化,如果是星期六,应该移动-1天,如果是太阳,应该移动+1,其他的仍然是:

<?php
    function changeDate($date) {
        if (date("N", strtotime($date)) == 6) {
            return date("Y-m-d", strtotime("-1 day ", strtotime($date)));
        } elseif (date("N", strtotime($date)) == 7) {
            return date("Y-m-d", strtotime("+1 day ", strtotime($date)));
        } else {
            return date("Y-m-d", strtotime($date));
        }
    }

    echo changeDate("2016-03-25"); //Friday
    echo '<br>';
    echo changeDate("2016-03-26"); //Saturday 
    echo '<br>';
    echo changeDate("2016-03-27"); //Sunday
?> 

输出:

2016-03-25 //not changed
2016-03-25 //moved -1 day
2016-03-28 //moved +1 day

答案 3 :(得分:0)

在下面的示例中,我将向您展示最短和(在我看来)获得下一个工作日的最佳选择。

// Create a new DateTime object
$date = DateTime::createFromFormat('Y-m-d', '2016-03-25')->modify('-1 day');

// Modify the date to get the next weekday
$date->modify('next weekday');

// Output the date
echo $date->format('Y-m-d');

让“DateTime”变得非常棒的是它非常灵活,让你可以尝试“尝试”。像上面这样的东西。

祝你好运!