可将中文星期字符串(如“星期一”)转换为数字(1~7),再结合当前日期计算并格式化输出目标日期。方法包括:一、用strtr映射替换后调用date;二、用DateTime类配合weekMap查表偏移;三、正则提取汉字后映射计算相对天数;四、封装支持“星期/周/礼拜”多形式的复用函数。

如果您需要将PHP中表示中文星期的字符串(例如“星期一”、“周二”)转换为对应的数字星期(如1代表周一,7代表周日),再按指定格式输出日期,可通过多种方式实现。以下是解决此问题的步骤:
一、使用strtr配合date函数映射中文星期
该方法通过预定义中文星期与数字星期的映射关系,先将中文字符串替换为数字,再结合当前日期或指定日期进行格式化处理。
1、定义中文星期到数字星期的替换数组,注意中国习惯中周一为1,周日为7。
2、使用strtr函数将输入的中文星期字符串(如“星期三”)替换为对应数字(如“3”)。
立即学习“PHP免费学习笔记(深入)”;
3、获取当前日期的年月日部分,例如用date('Y-m-d')获取今天日期。
4、将替换得到的数字星期与日期组合,调用date('Y-m-d', strtotime("next $num day"))等方式计算目标星期对应的具体日期。
二、利用DateTime类配合自定义映射表
该方法借助DateTime对象的灵活性,通过查找中文星期在固定基准周中的偏移量,动态生成对应日期。
1、建立索引数组:$weekMap = ['星期一'=>1, '星期二'=>2, '星期三'=>3, '星期四'=>4, '星期五'=>5, '星期六'=>6, '星期日'=>7]。
2、从输入字符串中提取关键词,例如用preg_match匹配“星期[一二三四五六日]|周[一二三四五六日]”。
3、查表获取对应数字星期值,并确保数值范围严格限定在1~7之间。
4、创建DateTime对象指向本周一(new DateTime('this Monday')),然后加上($num - 1)天得到目标星期日期。
5、调用format方法输出所需格式,如'Y年m月d日'或'Y-m-d l'。
三、正则提取+date_parse_from_format模拟解析
该方法不依赖外部映射,而是通过正则识别中文字符后,直接构造符合PHP日期解析规则的临时字符串参与运算。
1、使用正则表达式捕获中文星期词,例如/(星期|周)([一二三四五六日])/。
2、根据捕获的汉字“一”至“日”,分别映射为1~7,其中“日”必须映射为7而非0。
3、以今天为基准,计算目标星期是本周还是下周:若目标数字小于今天date('N'),则加7天;否则保持原差值。
4、用strtotime('+X days')生成时间戳,再用date()按需格式化输出。
四、封装为可复用函数并支持多格式输入
该方法将逻辑抽象为独立函数,兼容“星期X”、“周X”、“礼拜X”等多种中文表达形式,提升鲁棒性。
1、定义函数convertChineseWeekToDate($chineseWeek, $format = 'Y-m-d'),参数接收原始字符串和期望输出格式。
2、构建统一替换规则数组,覆盖常见变体:['星期一','周一','礼拜一']→1,['星期日','周日','礼拜日']→7。
3、遍历该数组,使用str_replace批量归一化输入字符串为标准形式。
4、对标准化后的字符串执行精确匹配,提取数字星期值,未匹配时抛出异常或返回false。
5、基于数字星期值与当前date('N')计算相对天数,生成DateTime实例并调用format($format)返回结果。











