这已经asked(严重)之前 - 我不认为在该职位的答案真的解决问题,然后它去陈旧。我将试图再次提出这个问题的更清楚的证明。如何可靠地实现“下一个” /“之前的”月
的Javascript Date.setMonth()
的实施似乎并不遵循最小惊讶的原则。在浏览器控制台试试这个:
d = new Date('2017-08-31') // Set to last day of August
d.getMonth() // 7 - months are zero-based
d.setMonth(8) // Try to set the month to 8 (September)
d.getMonth() // 9 - October. WTF Javascript?
同理:
d = new Date('2017-10-31')
d.getMonth() // 9
d.setMonth(8)
d.getMonth() // 9 (still?)
的Firefox在Linux上出现更糟糕 - 有时getMonth()
返回十月的日期,并由此不当月匹配!
我的问题(我认为从那个链接问题的OP)是如何在例如一致性实现“下一个”/“前一个月”功能。日期选择器?有没有不感到惊讶用户,例如,跳过九月,当他们开始在8月31日,然后单击“下一步”,这样做的一个众所周知的方法是什么?从1月31日会是更难预料目前 - 你最终会在任3月2日或3月3日,取决于它是否是一个闰年!
我个人认为,最不感到惊讶的是转入最后一天的下一个/上个月。但是,这需要setMonth()
落实到关心天在有关的月数,而不仅仅是加/减一个固定的时间。据this线程时,moment.js
办法是加/减毫秒的30天数,这表明该库将易于相同不一致。
是的,我认为这与我想出的解决方案非常相似。我检查了一个月不等于你想要的月份,但我想检查一天发生变化的几乎是相当的。 – dsl101