使用moment.js获取的dayOfWeek判断等于0不生效的原因及修复方法
故障根因
- 类型不匹配:
moment().tz(timezone).format('d')的返回值为字符串类型,周日场景下返回的是'0'而非数字0。严格相等运算符===会同时校验值和数据类型,字符串'0'与数字0类型不一致,因此判断永远返回false。 - 语法错误:原代码if条件缺失闭合右括号,
if ((dayOfWeek === 0 ) || (dayOfWeek == 6)少了一个右括号,运行时会直接抛出语法错误。
修复方案
推荐两种可行修复方式,二选一即可:
- 类型转换后使用严格相等判断,同时补全语法括号:
const dayOfWeek = Number(moment().tz(timezone).format('d')); // 周末检测逻辑 // 0 = 周日,6 = 周六 if (dayOfWeek === 0 || dayOfWeek === 6) { response = "closed"; } else { response = "open"; }
- 直接使用moment原生的数字星期获取方法,无需额外做类型转换,性能和可靠性更高:
// moment().day() 原生返回数字类型的星期值,范围0(周日)~6(周六) const dayOfWeek = moment().tz(timezone).day(); // 周末检测逻辑 if (dayOfWeek === 0 || dayOfWeek === 6) { response = "closed"; } else { response = "open"; }
内容的提问来源于stack exchange,提问作者Brian Fryk
相关产品推荐
相关产品推荐

