Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript:打印前12个月--”;三月“;打印两次?_Javascript - Fatal编程技术网

JavaScript:打印前12个月--”;三月“;打印两次?

JavaScript:打印前12个月--”;三月“;打印两次?,javascript,Javascript,我正在写一个脚本,打印过去12个月的名字。因为这个月是一月,所以应该打印:十二月 十一月 十月 九月 八月 七月 六月 也许 四月 前进 二月 一月 相反,它会打印两次三月 十一月 十月 九月 八月 七月 六月 也许 四月 前进 前进 二月 HTML Javascript monthNames = [ "January", "February", "March", "April", "May", "June","July", "August", "September", "Octob

我正在写一个脚本,打印过去12个月的名字。因为这个月是一月,所以应该打印:十二月 十一月 十月 九月 八月 七月 六月 也许 四月 前进 二月 一月

相反,它会打印两次三月

十一月 十月 九月 八月 七月 六月 也许 四月 前进 前进 二月

HTML


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>");       
    }
monthNames=[“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”];
d=新日期();
对于(i=0;i<12;i++){
d、 setMonth(d.getMonth()-1);
monthName=monthNames[d.getMonth()];
$('#test').append(monthNames[d.getMonth()]+“
”; }

我做错了什么?

不错!花了我一段时间

原因是今天是29号。由于日期对象被隐式设置为当前日期,并且2013年2月只有28天,因此可以看到3月打印了两次。通过设置可选的
day
参数来解决此问题:

d.setMonth(d.getMonth() - 1, 1);

那是因为今天正好是29日,当你到了2月29日,它将结束到3月

将日期设置为1日(或小于29日的任何其他日期),则该日期适用于所有月份:

d = new Date();
d.setDate(1);
d.setMonth(d.getMonth() - 1);
演示:

试试这个:

monthNames=[“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”];
m=(新日期()).getMonth();
对于(变量i=0;i<12;i++){
$('#test')。追加(monthNames[(m-i+11)%12]+“
”; }
我认为没有任何理由在每次迭代中都使用Date对象。一旦我们知道了当前月份,我们所需要做的就是向后迭代列表,并在末尾环绕。这是
%
的工作。不幸的是,
%
不执行真正的数学
mod
操作,并且可能返回负值,因此最简单的实现方法是通过向该值添加额外的12来确保该值为正值:

var month = new Date().getMonth();

for (i = 1; i <= 12; i++) {
    $('#test').append(monthNames[(12 + month - i) % 12] + "<br>");            
}
var month=new Date().getMonth();

对于(i=1;i)典型的日期问题:您可以使用更简单的一个:
m=d.getMonth()-2;对于(i=0;i<12;i++)$('#test')。附加(monthNames[(12+m-i)%12]+“
”;
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] + "<br>");       
}
var month = new Date().getMonth();

for (i = 1; i <= 12; i++) {
    $('#test').append(monthNames[(12 + month - i) % 12] + "<br>");            
}