从日期添加/减去天数不会正确更改年/月

时间:2010-12-01 00:05:09

标签: javascript jquery date

如果我的日期为2011-01-02而且我从该日期开始减去7天,它应该会给我2010-12-26,但它会给我2011-01-26

请参阅下面的JS以验证链接:

var date = new Date('2011','01','02');
alert('the original date is '+date);
var newdate = new Date(date);
newdate = newdate.setDate(newdate.getDate() - 7);
var nd = new Date(newdate);
alert('the new date is '+nd);

http://jsbin.com/upeyu/6

5 个答案:

答案 0 :(得分:20)

我认为你打算这样做:(完美地工作)

var date = new Date('2011','01','02');
alert('the original date is '+date);
var newdate = new Date(date);
newdate.setDate(newdate.getDate() - 7);
var nd = new Date(newdate);
alert('the new date is '+nd);

jsFiddle example

答案 1 :(得分:4)

getDate()setDate()都只是指该日期的某一天。为了减去7天你想要这样做:

myDate.setDate( myDate.getDate() - 7 );

这会将当月的日期设置为月份减去7。如果您最终使用负数,则会回到上个月。

答案 2 :(得分:2)

.getDate()仅返回月中的某一天,而.setDate()仅设置月份的日期,而不是日期。

尝试

var date = new Date('2011','01','02');
alert('the original date is '+date);
var newdate = new Date(date.getTime() - 604800000);
alert('the new date is '+newdate);

答案 3 :(得分:0)

这是因为setDate方法仅假设来设置月中的某一天

答案 4 :(得分:0)

我写了一个实用程序                 Date.prototype.subDuration = subDuration;                 function subDuration(a,b){                     if((typeof a ==='string')&&(typeof b ==='number')){                        if((a ===“Add”)||(a ===“Sub”)){                          subdur.call(此,A,B)                        }其他{                          返回false;                       }                     }

                function subdur(action,days){
                   switch (action){
                      case 'Add': 
                      addDays.call(this,days);
                      break;
                      case 'Sub': 
                      rmvDays.call(this,days)
                      break;
                      default:
                      return false;
                   }
                   function addDays(days){
                        this.setDate(this.getDate()+days)
                   };
                   function rmvDays(days){
                        this.setDate(this.getDate()-days);
                   };
                }


            }

            var d = new Date('2011','00','02');
            alert(d);
            d.subDuration('Add',2);
            alert(d);
            d.subDuration('Sub',3);
            alert(d);