PHP代码2023年节假日时间输出为json

lys2022年12月27日 0条评论
<?php

$arr = [];
$year = 2023;
$month = 12;
$days = 0;
$weekarray = array("日", "一", "二", "三", "四", "五", "六");
$indexDay = 0;
$gjfj = [  //国家法定假日
    '2023-01-01',
    '2023-01-02',
    '2023-01-21',
    '2023-01-22',
    '2023-01-23',
    '2023-01-24',
    '2023-01-25',
    '2023-01-26',
    '2023-01-27',
    '2023-04-05',
    '2023-04-29',
    '2023-04-30',
    '2023-05-01',
    '2023-05-02',
    '2023-05-03',
    '2023-06-22',
    '2023-06-23',
    '2023-06-24',
    '2023-09-29',
    '2023-09-30',
    '2023-10-01',
    '2023-10-02',
    '2023-10-03',
    '2023-10-04',
    '2023-10-05',
    '2023-10-06'
];
$work = [   //特殊补班
    '2023-01-28',
    '2023-01-29',
    '2023-04-23',
    '2023-05-06',
    '2023-06-25',
    '2023-10-07',
    '2023-10-08'
];
for ($i = 1; $i <= $month; $i++) {
    if (in_array($i, [1, 3, 5, 7, 8, 10, 12])) { //大月
        $days = 31;
    } elseif ($i == 2) {
        $days = 28;
    } else { //小月
        $days = 30;
    }
    for ($d = 1; $d <= $days; $d++) {
        $indexDay++;
        $dd = $d;
        if($dd < 10){
            $dd = '0'.$dd;
        }
        if($i >= 10){
            $time = $year . '-' . $i . '-' . $dd;
        }else{
            $time = $year . '-0' . $i . '-' . $dd;
        }
        $wIndex = date("w", strtotime($time . ' 00:00:00'));
        if($indexDay == 1){
            $yearweek = 202252;  //2022年第几周
        }else{
            $yearIndexWeek = strval(ceil(($indexDay-1) / 7));
            if($yearIndexWeek < 10){
                $yearIndexWeek = '0'.$yearIndexWeek;
            }
            $yearweek = '2023'.$yearIndexWeek;   //2023年第几周
        }
        if (in_array($time, $gjfj)) {
            $arr[] = [
                'yearweek' => intval($yearweek),
                'yearday' => $indexDay,
                'holiday_today' => 1,
                'holiday_legal' => 1,
                'holiday_recess' => 1,
                'w' => $weekarray[$wIndex],
                'date' => intval(str_replace('-','',$time)),
                'year' => $year,
                'month' => $i
            ];
        } elseif (in_array($weekarray[$wIndex], ['日', '六']) && !in_array($time, $work)) {
            $arr[] = [
                'yearweek' => intval($yearweek),
                'yearday' => $indexDay,
                'holiday_today' => 2,
                'holiday_legal' => 2,
                'holiday_recess' => 2,
                'w' => $weekarray[$wIndex],
                'date' => intval(str_replace('-','',$time)),
                'year' => $year,
                'month' => $i
            ];
        }
    }

}

//file_put_contents('holiday.json', json_encode($arr, JSON_UNESCAPED_UNICODE));
$sql = 'insert into holiday(`year`,`month`,`date`,`yearweek`,`yearday`,`holiday_today`,`holiday_legal`,`holiday_recess`,`create_time`
) values';
$createTime = date('Y-m-d H:i:s');
foreach ($arr as $val){
    $sql .= "(%d,%d,%d,%d,%d,%d,%d,%d,'%s'),";
    $sql = sprintf($sql,$val['year'],$val['month'] ,
        $val['date'],$val['yearweek']
        ,$val['yearday']
        ,$val['holiday_today']
        ,$val['holiday_legal']
        ,$val['holiday_recess']
        ,$createTime
    );
}
$sql = substr($sql,0,strlen($sql)-1).';';
file_put_contents('holiday.sql', $sql);