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
相关产品推荐
相关产品推荐

