我正在尝试编写一个打印前12个月名称的脚本 . 由于这个月是1月,它应该打印:12月11月10月9月8月7月6月5月4月3月2月1月
相反,它打印三月两次 . http://jsfiddle.net/h69gm04g/2/
11月10月9月8月7月6月5月4月3月3月2月
HTML
<div id="test"></div>
使用Javascript
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()] + "<br>");
}
我究竟做错了什么?
4 回答
好一个!花了我一会儿 .
原因是今天是29日 . 由于您的日期对象被隐式设置为当前日期,并且二月份仅二月有28天,因此您会看到三月打印两次 . 通过设置可选的
day
参数来解决此问题:那是因为今天恰好是第29届,当你到了2月29日时,它将结束进入游行 .
将日期设置为1(或任何其他小于29的日期),然后它适用于所有月份:
演示:http://jsfiddle.net/h69gm04g/3/
我不知道在每次迭代时操作Date对象的答案的任何原因 . 一旦我们知道当前月份,我们需要做的就是向后迭代列表,最后回合 . 这是
%
的工作 . 不幸的是,%
没有做真正的数学mod
操作,并且可以返回负值,因此最简单的实现是通过向其添加额外的12来确保该值为正:( JSFiddle )
试试这个http://jsfiddle.net/oLp9hegk/: