如何在日期中添加天数?

时间:2014-01-08 07:35:50

标签: javascript date

我想在Javascript中添加5天的日期字符串:

var olddate = '23.12.2013';
olddate = olddate.split('.');
var tmpDate = new Date(olddate[2],olddate[1],olddate[0]);
tmpDate.setDate(tmpDate.getDate() + 5);

var date = (tmpDate.getDate().toString().length < 2) ? '0' + 
    tmpDate.getDate() : tmpDate.getDate();

var month = (tmpDate.getMonth().toString().length < 2) ? '0' + 
    tmpDate.getMonth() : tmpDate.getMonth();

console.log( date + '.'  + month + '.'+ tmpDate.getFullYear());

此代码显示27.00.2014而非我期望的内容:27.12.2013。我想在String日期添加5天。为什么这个月关闭了?

4 个答案:

答案 0 :(得分:2)

我总是创建7个函数,在JS中使用日期:addSeconds,addMinutes,addHours,addDays,addWeeks,addMonths,addYears。

您可以在此处查看示例:http://jsfiddle.net/tiagoajacobi/YHA8x/

使用方法:

var now = new Date();
console.log(now.addWeeks(3));

这是功能:

        Date.prototype.addSeconds = function(seconds) {
            this.setSeconds(this.getSeconds() + seconds);
            return this;
        };

        Date.prototype.addMinutes = function(minutes) {
            this.setMinutes(this.getMinutes() + minutes);
            return this;
        };

        Date.prototype.addHours = function(hours) {
            this.setHours(this.getHours() + hours);
            return this;
        };

        Date.prototype.addDays = function(days) {
            this.setDate(this.getDate() + days);
            return this;
        };

        Date.prototype.addWeeks = function(weeks) {
            this.addDays(weeks*7);
            return this;
        };

        Date.prototype.addMonths = function (months) {
            var dt = this.getDate();

            this.setMonth(this.getMonth() + months);
            var currDt = this.getDate();

            if (dt !== currDt) {  
                this.addDays(-currDt);
            }

            return this;
        };

        Date.prototype.addYears = function(years) {
            var dt = this.getDate();

            this.setFullYear(this.getFullYear() + years);

            var currDt = this.getDate();

            if (dt !== currDt) {  
                this.addDays(-currDt);
            }

            return this;
        };

答案 1 :(得分:1)

日期构造函数需要从011而不是112的数字月份,因此当您执行此操作时,您将停用一个月:

var olddate = '23.12.2013';
// Calculate new date
olddate = olddate.split('.');
var tmpDate = new Date(olddate[2],olddate[1],olddate[0]);

您可以通过以下方式纠正错误:

var tmpDate = new Date(+olddate[2], +olddate[1] - 1, +olddate[0]);

工作演示:http://jsfiddle.net/jfriend00/Aa4P7/

答案 2 :(得分:1)

非常简单的方法是使用.setDate()

var olddate = '23.12.2013';
// Calculate new date
olddate = olddate.split('.');
var tmpDate = new Date(olddate[2],olddate[1]-1,olddate[0]);
var numberOfDaysToAdd = 6;
tmpDate .setDate(tmpDate .getDate() + numberOfDaysToAdd); 

但我建议您使用Moment.js。使用此功能,您可以按照自己的方式操作日期时间。

修改

在您的示例问题中,Javascript Date()月份从0开始。所以例如,如果你这样做

var abc = new Date();
console.log(abc.getMonth());

您将获得当前1月份的输出0,而不是1

所以考虑到这一点,你会得到正确的结果。

答案 3 :(得分:0)

我多次使用过它:

您可以传递三个参数:
1.时间(要添加的时间)注意:您需要传递Date而不是String
2.键入(您想添加“小时”或“日”或“moneth”或“年”)
3. n(您要添加多少次?默认值为1,如果类型为“小时”,则表示您要添加1小时等。)

calNByDateType : function(time, type) {

  var myTime = new Date( time.valueOf() );
  var n = 1;
  if(arguments[2]!==undefined) {
    n=arguments[2];
  }
  if(type==="hour") {
    myTime.setHours( myTime.getHours() + n );
  } else if(type==="day") {
    myTime.setDate( myTime.getDate() + n );
  } else if(type==="month") {
    myTime.setMonth( myTime.getMonth() + n );
  } else if(type==="year") {
    myTime.setFullYear( myTime.getFullYear() + n );
  }

  return myTime;
}