如何在三变量满足特定条件时修改变量?条件判断问题排查
问题分析与修复
问题描述
编写了一段if语句,意图在日期为12月31日且时区偏移量大于0.1时,将currentYear加1,同时重置currentDate为"1"、currentMonth为"0"(用于设置Cookie过期时间)。但当前异常:即使currentTimezone小于0.1,if语句仍会执行,|| (0.1 < currentTimezone)条件未起到预期作用。
附原代码:
const D = new Date(); let currentDate = D.getDate(); let currentMonth = D.getMonth(); let currentYear = D.getFullYear(); let currentTimezone = D.getTimezoneOffset()/60; /* Change year if end of year */ if ((currentMonth == "11" && currentDate == "31") || (0.1 < currentTimezone)) { currentYear = currentYear + 1; currentDate = "1"; currentMonth = "0"; }
问题根源
- 逻辑运算符错误:你需要的是「同时满足两个条件」,但误用了
||(逻辑或)——只要其中一个条件成立就会执行代码块。正确逻辑应该用&&(逻辑与),只有两个条件都满足时才执行。 - 类型不匹配:
getMonth()和getDate()返回的是数字类型,但你用字符串"11"、"31"做比较。虽然JS会隐式转换,但统一用数字比较更严谨,避免潜在类型转换问题。 - 时区偏移量含义易混淆:
getTimezoneOffset()返回当前时区与UTC的分钟差,东时区返回负数,西时区返回正数(比如北京时间UTC+8,返回-480,除以60后是-8)。如果你的需求是判断东时区,0.1 < currentTimezone的逻辑是反的,需要改成currentTimezone < -0.1,请根据实际需求确认。
修复后的代码
const D = new Date(); let currentDate = D.getDate(); let currentMonth = D.getMonth(); let currentYear = D.getFullYear(); let currentTimezone = D.getTimezoneOffset()/60; /* Change year if end of year and meets timezone condition */ // 注意:如果是判断东时区(比如UTC+X),请把currentTimezone > 0.1改成currentTimezone < -0.1 if ((currentMonth === 11 && currentDate === 31) && (currentTimezone > 0.1)) { currentYear += 1; currentDate = "1"; currentMonth = "0"; }
内容的提问来源于stack exchange,提问作者gregfasfsdfs
相关产品推荐
相关产品推荐

