u014526269
TDDing
2018-03-30 12:45
采纳率: 100%
浏览 2.2k

javascript 中日期的setDate()方法问题?

如下使用循环,每次日期减去7天,后可以得到对应的7天前的日期。
var date=new Date();
for(i=0;i<10;i++){
date.setDate(date.getDate()-7);
console.log(date);
}
接下来,使用方法封装一个每次减去7的函数
function changedate(date){
var datenew=new Date();
datenew.setDate(date.getDate()-7);
return datenew;
}
然后再去用循环调用这个方法,输出的结果每次跨月份的时候,就不正常,这是什么原理?
var date=new Date();
for(i=0;i<10;i++){
date=changedate(date);
console.log(date);
}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • gongzhaohui
    logoes 2018-03-31 06:17
    已采纳

    function changedate(date){
    date.setDate(date.getDate()-7);
    return date;
    }
    setDate只有一个天的参数,不是日期。下面是MDN的函数说明:
    dateObj.setDate(dayValue)
    Parameters
    dayValue
    An integer representing the day of the month.
    类似你做的,在函数里如果新建一个日期,那返回的永远是当月和前月的日期。
    运行一下下面的代码,可能更直观。跨月时date.getDate()-7返回的是一个负值。
    var date=new Date();
    for(i=0;i<10;i++){
    date=changedate(date);
    console.log(date.getDate()-7);
    console.log(date);
    }

    点赞 评论
  • hao893949088
    壕号浩昊好 2018-03-30 14:06

    建议你用时间戳去计算比较好

    点赞 评论
  • gzf
    gzf 2018-03-30 15:26

    用moment.sj好了简单

    点赞 评论
  • baidu_37113117
    盈虚明灭 2018-03-30 19:38

    每次循环调用changedate方法的时候,changedate方法会新创建一个datenow对象。datenow对象的值时当前时间。

    方法只改变了天数,月份会不断的刷新。传入的date天数小于7,返回的时间月份会变成上一个月,但是下一次调用这个方法创建的datenew又是这个月啊。

    你debug一下,看看datenew的时间就知道了

    点赞 评论
  • u011342760
    是速度啊 2018-03-31 00:22

    getDate获取年月日,在换月份时有异常,建议用时间戳getTime,每次减去7天的毫秒数,之后再使用new Date(减去7天的毫秒数)函数转换成日期

    点赞 评论

相关推荐