ReactJS从月份数组获取前序月份名称(解决日期bug)
问题原因与解决方案
问题原因
不是默认按28天计算,而是Date对象的自动日期调整机制导致的:当调用setMonth设置的月份不存在当前日期时,Date会自动将日期顺延到下一个月。比如3月31日执行setMonth(1)(试图设置为2月),但2月最多只有28/29天,日期会被自动调整为3月3日,此时getMonth()返回的还是2(对应March),导致重复添加同一个月份名称。
改进方案
提供两种可靠的解决方法:
方法一:先设置为当月第一天再调整月份
通过将日期先设置为当月1号,避免因日期溢出导致的月份跳转:
var value = 3; var d = new Date(); d.setDate(1); // 锁定当月第一天,消除日期溢出问题 var p = []; for (let i = 0; i < value; i++) { var monthName = this.state.monthsarray[d.getMonth()]; p.push(monthName); d.setMonth(d.getMonth() - 1); }
方法二:直接通过月份索引计算(更高效)
无需操作Date对象,直接基于当前月份索引计算前序月份的索引,完全规避日期处理的坑:
var value = 3; var currentMonth = new Date().getMonth(); var p = []; for (let i = 0; i < value; i++) { // 加12再取模,避免出现负数索引(比如当前是0即January,减1后加12取模得到11即December) var monthIndex = (currentMonth - i + 12) % 12; p.push(this.state.monthsarray[monthIndex]); }
内容的提问来源于stack exchange,提问作者Kanika Singla
相关产品推荐
相关产品推荐

