PHP获取指定日期n天前后的日期列表

橙子与柠檬 / 2024-09-22 / 原文

/**
 * 获取指定日期n天前后的日期列表
 * @param string $date 日期
 * @param int $day_num 天数
 * @param string $cate 类型
 * @param string $format 格式
 * @return array
 */
function get_date_ab_list(string $date, int $day_num, string $cate = 'b', string $format = 'Y-m-d'): array
{
    //cate b代表before,指定日期往前$day_num天,a代表after,指定日期往后$day_num天
    $timezone = 'PRC';
    $data     = [$date];
    switch ($cate) {
        case 'a':
            if ($day_num > 0) {
                $data = [];
                for ($i = 1; $i < ($day_num + 1); $i++) {
                    $str      = '+' . $i . ' day';
                    $datetime = new \DateTime($date, new \DateTimeZone($timezone));
                    $tmp      = $datetime->modify($str);
                    $data[]   = $tmp->format($format);
                }
            }
            break;
        case 'b':
            if ($day_num > 0) {
                $data = [];
                for ($i = 1; $i < ($day_num + 1); $i++) {
                    $str      = '-' . $i . ' day';
                    $datetime = new \DateTime($date, new \DateTimeZone($timezone));
                    $tmp      = $datetime->modify($str);
                    $data[]   = $tmp->format($format);
                }
            }
            break;
    }
    sort($data);
    return $data;
}