如何将2021-W46类周字符串转为ColdFusion日期函数可识别的周一日期
ColdFusion处理ISO周日期(yyyy-Wxx)转换为当周周一的实现方案
实现逻辑
- 你使用的
2021-W46属于ISO 8601标准周格式,ColdFusion原生parseDateTime、dateFormat函数默认不支持该格式,需手动拆分字段后按ISO周规则计算日期 - ISO周核心规则:以周一为一周起始,每年1月4日固定属于当年的第1周,以此为基准计算可避免跨年周的边界错误
可直接运行的实现代码
// 输入示例 inputWeekStr = "2021-W46"; // 正则拆分年份和周数 matchResult = reMatch("^(\d{4})-W(\d{1,2})$", inputWeekStr); if(arrayLen(matchResult) == 0){ throw(message: "输入周日期格式不符合yyyy-Wxx规范"); } yearPart = matchResult[1].group(1); weekPart = matchResult[1].group(2); // 取当年1月4日作为基准(固定属于当年ISO第1周) baseDate = createDate(yearPart, 1, 4); // 计算1月4日到当周周一的偏移量:ColdFusion的dayOfWeek返回值1=周日、2=周一...7=周六 weekDayOffset = (dayOfWeek(baseDate) + 5) % 7; firstWeekMonday = dateAdd("d", -weekDayOffset, baseDate); // 加(目标周数-1)*7天得到目标周的周一 targetMonday = dateAdd("d", (weekPart - 1) * 7, firstWeekMonday); // 输出验证,targetMonday为原生日期对象,可直接传入parseDateTime、dateFormat处理 writeOutput(dateFormat(targetMonday, "yyyy-mm-dd"));
结果验证
输入2021-W46时上述代码输出为2021-11-15,对应2021年第46周的周一,计算结果符合预期。
内容的提问来源于stack exchange,提问作者Userx10xC
相关产品推荐
相关产品推荐

