2020-10-28 12:03:07
围观(8135)
PHP 判断日期是否为周六日很简单,如获取今天是周几:
date('w');如果返回了 0 或者 6 就是周日和周六,获取指定日期是周几可以这样:
date('w', '20201028');当然本文没那么简单,因为本文要获取的是“工作日”而不是周六日。
因为每年都有一些传统节日,而且这些传统节日每年的日期都不一样,国家给的节假日安排也不一样。
所以先要获取国家安排的节假日(可以直接百度搜:2020节假日安排): http://www.gov.cn/zhengce/content/2019-11/21/content_5454164.htm
接着就是将这些日期进行排列并进行判断,例如博主写的这样的方法:
/*
返回 false 非工作日 true 工作日
@param string $target_day
@return bool
**/
function getIsWorkingDay(string $target_day) : bool
{
if (!strtotime($target_day) || mb_strlen($target_day) !== 8) {
return false;
}
// 特殊的假日 (传统节日放假)
$lst_holiday = [
'20200101' => '', // 元旦
'20200124' => '20200202', // 春节
'20200404' => '20200406', // 清明节
'20200501' => '20200505', // 劳动节
'20200625' => '20200627', // 端午节
'20201001' => '20201008', // 中秋
'20201001' => '20201008', // 国庆 (由于 2020 年中秋和国庆同样 所以国庆的可以省略)
];
// 特殊的工作日 (传统节日前后补班)
$lst_working_day = [
'20200119' => '', // 春节
'20200426' => '', // 劳动节
'20200509' => '', // 劳动节
'20200628' => '', // 端午节
'20200927' => '', // 中秋 / 国庆
'20201010' => '', // 中秋 / 国庆
];
// 遍历数组 获取今天是否为假日
foreach ($lst_holiday as $holiday_key => $holiday_value) {
if ($holiday_key == $target_day) {
return false;
}
if ($holiday_key > $target_day) {
if (!empty($holiday_value) && $holiday_value <= $target_day) {
return false;
}
}
}
// 遍历数组 获取今天是否为工作日
foreach ($lst_working_day as $working_key => $working_value) {
if ($working_key == $target_day) {
return true;
}
if ($working_key > $target_day) {
if (!empty($working_value) && $working_value <= $target_day) {
// var_dump(2);
return true;
}
}
}
// 最后执行到这里 说明当前日期并非特殊节假日或需要补班的时间
$week = date('w', strtotime($target_day));
if (!$week || $week == 6) {
// var_dump(3);
return false;
}
// var_dump(4);
return true;
}
// 假设时间输入不对
var_dump(getIsWorkingDay('bubaijun_com')); // 返回 false
var_dump(getIsWorkingDay(date('Ymd'))); // 返回 true 是工作日
var_dump(getIsWorkingDay('20201031')); // 返回 false 非工作日
var_dump(getIsWorkingDay('20200101')); // 返回 false 特殊节假日
var_dump(getIsWorkingDay('20201001')); // 返回 false 特殊节假日
var_dump(getIsWorkingDay('20201010')); // 返回 true 国庆中秋补班
var_dump(getIsWorkingDay('20200927')); // 返回 true 国庆中秋补班复制上面的代码就能实现判断某个指定日期是否为工作日了。
缺点就是每年知道节假日安排之后都要进行数据修改。
本文地址 : bubaijun.com/page.php?id=218
版权声明 : 未经允许禁止转载!
上一篇文章: PHP+NodeJs后端给网站截图
下一篇文章: 安装GO并体验了一下Beego框架