PHP函数确定日期是否为一个月的最后一个工作日(周一至周五)

时间:2020-10-09 15:11:48

标签: php date

我试图找出一个函数,如果DateTime日期是一个月的最后一个工作日(周一至周五),该函数将返回true。到目前为止,这就是我所拥有的。有任何改进建议吗?

例如,如果我在2020年10月30日过去,它应该返回true,因为30号星期五是10月的最后一个工作日(星期一至星期五)。

例如,如果我在2020年10月31日过去,它应该返回false,因为31号是星期六(不是星期一至星期五)

function isLastWeekday($dateObject){
    $last_day = new DateTime($dateObject->format( 'Y-m-t' ));
    $last_day_of_month = $last_day->format( 't' );
    switch( $last_day->format('N') ) {
            case 6:
                $last_day_of_month += -1;
            break;
            case 7:
                $last_day_of_month += -2;
            break;
    }

    if( $dateObject->format( 'Y-m-d' ) == $last_day->format( 'Y-m-' ).$last_day_of_month ){
        return true;
    }else{
        return false;
    }
}

谢谢, 本

1 个答案:

答案 0 :(得分:1)

使用strtotime()relative date formats,它采用传入的日期(假定为DateTime对象)并将其格式化为下个月初,并由last weekday进行修改,因此对于2020年10月,这会将2020-10-30作为最后一个工作日。然后将其与传入的原始日期的时间戳进行比较...

function isLastWeekday($dateObject){
    $end = clone $dateObject;
    $end->modify('first day of next month');
    return strtotime( $end->format( 'Y-m-d' ).' last weekday')
        == $dateObject->getTimeStamp();
}

使用月的最后一天存在一些问题,所以这就是为什么它要在一个月内移动

或者仅使用DateTime对象...

function isLastWeekday($dateObject){
    $end = clone $dateObject;
    $end->modify('first day of next month')->modify('last weekday');
    return $end == $dateObject;
}