JavaScript: Print previous 12 months — “March” prints twice?
我正在写一个打印前12个月名字的脚本。因为这个月是一月,所以应该打印:十二月十一月十月九月八月七月六月五月四月三月二月一月
相反,它打印了两次三月。http://jsfiddle.net/h69gm04g/2/
十一月十月九月八月七月六月五月四月三月三月二月
HTML
1 |
JavaScript
1 2 3 4 5 6 7 8 | monthNames = ["January","February","March","April","May","June","July","August","September","October","November","December" ]; d = new Date(); for (i = 0; i < 12; i++) { d.setMonth(d.getMonth() - 1); monthName = monthNames[d.getMonth()]; $('#test').append(monthNames[d.getMonth()] +""); } |
我做错什么了?
好一个!花了我一段时间。
原因是今天是29号。由于您的日期对象被隐式设置为当前日期,并且2013年2月只有28天,所以您会看到3月打印了两次。通过设置可选的
1 | d.setMonth(d.getMonth() - 1, 1); |
我认为在每次迭代中操纵日期对象的答案没有任何理由。一旦我们知道了当前的月份,我们需要做的就是向后迭代列表,并在末尾进行包装。这是
1 2 3 4 5 | var month = new Date().getMonth(); for (i = 1; i <= 12; i++) { $('#test').append(monthNames[(12 + month - i) % 12] +""); } |
(JSFiddle)
那是因为今天正好是29号,到了2月29号,就要到3月了。
将日期设置为第一个(或任何其他小于29的日期),然后它将在所有月份工作:
1 2 3 | d = new Date(); d.setDate(1); d.setMonth(d.getMonth() - 1); |
演示:http://jsfiddle.net/h69gm04g/3/
试试这个http://jsfiddle.net/olp9hegk/:
1 2 3 4 5 6 | monthNames = ["January","February","March","April","May","June","July","August","September","October","November","December" ]; m = (new Date()).getMonth(); for (var i = 0; i < 12; i++) { $('#test').append(monthNames[(m-i+11)%12] +""); } |