You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP后端实现诊所专科门诊指定星期日期筛选展示的技术问询

PHP实现按指定星期筛选日期(诊所挂号系统场景)

需求说明

搭建诊所专科在线挂号系统,部分专科仅在特定日期营业,需从给定的月份日期数组中筛选出指定星期的日期。示例数组(已翻译为中文):

// 指定需要筛选的星期
$targetWeekdays = ["周日","周三","周六"];

// 待筛选的全月日期数组
$allDates = [
    "周一 2022年8月1日",
    "周二 2022年8月2日",
    "周三 2022年8月3日",
    "周四 2022年8月4日",
    "周五 2022年8月5日",
    "周六 2022年8月6日",
    "周日 2022年8月7日",
    "周一 2022年8月8日",
    "周二 2022年8月9日",
    "周三 2022年8月10日",
    "周四 2022年8月11日",
    "周五 2022年8月12日",
    "周六 2022年8月13日",
    "周日 2022年8月14日",
    "周一 2022年8月15日",
    "周二 2022年8月16日",
    "周三 2022年8月17日",
    "周四 2022年8月18日",
    "周五 2022年8月19日",
    "周六 2022年8月20日",
    "周日 2022年8月21日",
    "周一 2022年8月22日",
    "周二 2022年8月23日",
    "周三 2022年8月24日",
    "周四 2022年8月25日",
    "周五 2022年8月26日",
    "周六 2022年8月27日",
    "周日 2022年8月28日",
    "周一 2022年8月29日",
    "周二 2022年8月30日",
    "周三 2022年8月31日"
];

解决方案

方法1:字符串拆分匹配(简单直接)

利用日期字符串的固定格式,拆分出星期部分后直接匹配目标数组:

$filteredDates = [];

foreach ($allDates as $dateStr) {
    // 按空格拆分字符串,提取星期部分
    $weekday = explode(' ', $dateStr)[0];
    // 判断当前日期的星期是否在目标列表中
    if (in_array($weekday, $targetWeekdays)) {
        $filteredDates[] = $dateStr;
    }
}

// 输出筛选结果
print_r($filteredDates);

优点:代码简洁,执行效率高;缺点:依赖日期字符串的固定格式,若后续格式变动(如分隔符修改)需同步调整逻辑。

方法2:DateTime类解析(健壮性强)

通过PHP的DateTime类解析日期,避免字符串格式依赖,适合长期维护的系统:

$filteredDates = [];
// 定义日期格式(匹配字符串中的日期部分)
$dateFormat = 'Y年n月j日';
// 英文星期到中文简写的映射(兼容服务器locale不支持中文的情况)
$weekdayMap = [
    'Sunday' => '周日',
    'Monday' => '周一',
    'Tuesday' => '周二',
    'Wednesday' => '周三',
    'Thursday' => '周四',
    'Friday' => '周五',
    'Saturday' => '周六'
];

foreach ($allDates as $dateStr) {
    // 提取日期部分(空格后的内容)
    $datePart = trim(substr($dateStr, strpos($dateStr, ' ') + 1));
    // 解析为DateTime对象
    $dateObj = DateTime::createFromFormat($dateFormat, $datePart);
    
    if ($dateObj) {
        // 获取英文星期,映射为中文简写
        $englishWeekday = $dateObj->format('l');
        $chineseWeekday = $weekdayMap[$englishWeekday];
        
        if (in_array($chineseWeekday, $targetWeekdays)) {
            $filteredDates[] = $dateStr;
        }
    }
}

print_r($filteredDates);

优点:不依赖日期字符串中的星期写法,即使字符串里的星期是全称(如"星期日")也能处理;缺点:代码稍复杂,但稳定性更高。

内容的提问来源于stack exchange,提问作者Febri Tahta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 10:06:25