如何在JavaScript中计算本月及下月时间并实现预约日期状态判断
实现预约日期的本月/下月判断逻辑
好的,咱们来一步步完善这两个判断逻辑!首先得明确JavaScript里Date对象的月份是从0开始计数的(0代表1月,11代表12月),这是处理日期时要注意的关键点。
核心思路
- 先把预约日期和当前日期都转换成
Date对象,提取它们的年份和月份 - 先判断是否已过期(你已经实现的逻辑)
- 再判断是否属于本月:预约日期的年份、月份和当前日期完全一致,且预约时间未过期
- 最后判断是否属于下月:要考虑跨年的情况(比如当前是12月,下月就是下一年的1月)
完整代码实现
var someTime = "2016-08-31T00:00:00"; var appointmentDate = new Date(someTime); var now = new Date(); // 提取年份和月份(注意getMonth()是0-based) var apptYear = appointmentDate.getFullYear(); var apptMonth = appointmentDate.getMonth(); var currentYear = now.getFullYear(); var currentMonth = now.getMonth(); // 1. 判断是否已发生 if (appointmentDate.getTime() < now.getTime()) { console.log("Due"); } // 2. 判断是否在本月 else if (apptYear === currentYear && apptMonth === currentMonth) { console.log("Due this month"); } // 3. 判断是否在下月 else { // 计算下月的年份和月份:处理跨年情况 var nextMonth = currentMonth + 1; var nextYear = currentYear; if (nextMonth > 11) { nextMonth = 0; nextYear += 1; } // 对比预约日期的年月是否等于下月的年月 if (apptYear === nextYear && apptMonth === nextMonth) { console.log("Due next Month"); } }
代码解释
- 首先把预约字符串转成
Date对象,同时获取当前时间的Date对象 - 提取年份用
getFullYear()(别用已废弃的getYear()),提取月份用getMonth() - 下月的判断要处理跨年:比如当前是12月(
currentMonth=11),加1后变成12,超过了11,所以要重置为0(1月),年份加1 - 顺序很重要:先判断过期,再判断本月,最后判断下月,避免逻辑冲突
这样就能完整覆盖你需要的三个判断场景啦!
内容的提问来源于stack exchange,提问作者Devmix
相关产品推荐
相关产品推荐

