首页 文章

php确定一系列日期是否属于周末

提问于
浏览
0

我正在构建一个脚本来检测某些日期是否每年都在周末 .

25日和26日是银行假日,如果他们在周末休息,下一个工作日可以替代银行假日,剩下的工作日是工作日 .

例如:如果25日是星期六,26日是星期日,27日和28日是银行假日,然后29日,30日,31日是工作日

如果25日是星期日,26日和27日,那么将是银行假日,28日,29日,30日将是工作日,31日将是星期六 .

这是我的约会对象:

date('25-12-Y');
date('26-12-Y');
date('27-12-Y');
date('28-12-Y');
date('29-12-Y');
date('30-12-Y');
date('31-12-Y');

我创建的代码是:(请注意$ getyear var是测试不同的年份)

function isWeekend($date) {
    return (date('N', strtotime($date)) >= 6);
}
$getyear = 2013;

echo '25 ';
if (isWeekend(date('25-12-'.$getyear))){
   echo 'weekend'; 
} else {
    echo 'bh';
};
echo '<br>';
echo '26 ';
if (isWeekend(date('26-12-'.$getyear ))){
    echo 'weekend';
} else {
    echo 'bh';
};
echo '<br>';
echo '27 ';
if (isWeekend(date('27-12-'.$getyear ))){
    echo 'weekend'; 
} else { 
    echo 'leave';
};
echo '<br>';
echo '28 ';
if (isWeekend(date('28-12-'.$getyear ))){
    echo 'weekend'; 
} else {
    echo 'leave';
};
echo '<br>';
echo '29 ';
if (isWeekend(date('29-12-'.$getyear ))){
    echo 'weekend'; 
} else {
    echo 'leave';
};
echo '<br>';
echo '30 ';
if (isWeekend(date('30-12-'.$getyear ))){
    echo 'weekend'; 
} else {
    echo 'leave';
};
echo '<br>';
echo '31 ';
if (isWeekend(date('31-12-'.$getyear ))){
    echo 'weekend'; 
} else {
    echo 'leave';
};
echo '<br>';

我知道这可能不是最好的做法,所以我正在寻找另一种方法来解决这个问题 .

2 回答

  • 0
    $dates = array();
    $christmas_days = array(25, 26);
    
    $year = 2013;
    
    for ($day = 25; $day <= 31; $day++)
    {
        $dates[$day] = date($day . '-12-' . $year);
    }
    
    
    
    foreach ($dates as $day => $date)
    {
        echo $day . ' ';
        if (isWeekend($date))
        {
            echo 'weekend';
            if (in_array($day, $christmas_days))
            {
                $bh_on_weekend++;
            }
        } 
        else
        {
            if ($bh_on_weekend > 0)
            {
                echo 'bh';
                $bh_on_weekend--;
            } 
            else
            {
                if (in_array($day, $christmas_days))
                {
                    echo 'bh';
                } 
                else
                {
                    echo 'leave';
                }
            }
        }
        echo '<br>';
    }
    
    function isWeekend($date)
    {
        return (date('N', strtotime($date)) >= 6);
    }
    

    试图以干燥的方式尽可能少地重复 . 日期创建有点动态 . 希望它能以某种方式帮助你或者想出如何使它与众不同 .

    产量为2021年

    25 weekend
    26 weekend
    27 bh
    28 bh
    29 leave
    30 leave
    31 leave
    
  • 1

    您应该使用Carbon来抽象所有逻辑 .

    然后你可以这样做:

    $dt = Carbon::create(2013, 12, 25);
    $dt->isWeekday(); // bool
    

    Carbon文档非常好,所以我相信你能找到你想要的东西 .

相关问题