JavaScript获取德国时区母亲节日期(dd.mm.yyyy)及代码报错排查
现有代码问题说明
- API调用错误:
getDay()返回的是星期索引(0代表周日,1-6代表周一到周六),你把这个值当成当月日期输出才会出现首位为0的问题,正确获取当月天数应该用getDate();getMonth()返回月份从0开始计数(0对应1月,4对应5月),输出时需要加1才能匹配日常使用的月份数值。 - 逻辑错误:计算5月第一个周日时,如果5月1日不是周日,你直接用
new Date()创建实例,这个实例默认取当前运行时间的年月日,调用setDate修改的是当前月份的日期,完全不是当年5月的日期,自然计算结果错误。 - 时区混用:代码同时调用了UTC系列方法(
getUTCDay、getUTCDate)和本地时间方法,德国时区与UTC存在1-2小时的偏移,混用API很容易出现跨天导致的日期错误。
简化实现代码
function getGermanMothersDay(targetYear) { const year = targetYear || new Date().getFullYear(); // 初始化当年5月1日 const mayFirst = new Date(year, 4, 1); // 计算5月1日是周几,0为周日 const weekDay = mayFirst.getDay(); // 计算第一个周日的日期 const firstSunday = weekDay === 0 ? 1 : 1 + (7 - weekDay); // 第二个周日为第一个周日加7天 const motherDay = firstSunday + 7; // 格式化输出,不足两位补0 const formatDay = String(motherDay).padStart(2, '0'); return `${formatDay}.05.${year}`; } // 测试2021年母亲节,输出09.05.2021,符合预期 console.log(getGermanMothersDay(2021)); // 不传参数默认获取当年母亲节日期 console.log(getGermanMothersDay());
该实现统一使用本地时间API计算,去掉了多余的Date实例创建,逻辑清晰,且自动补0完全匹配dd.mm.yyyy的输出格式。如果需要严格对齐德国时区,可以把实例化部分改为对应时区的时间初始化即可。
内容的提问来源于stack exchange,提问作者Sebastian
相关产品推荐
相关产品推荐

