如何添加月份到日期?js

How to add months to date ? Knockout js

本文关键字:日期 js 何添加 添加      更新时间:2023-09-26

我正在进行一些计算,我得到的是没有月份,所以我需要添加到开始日期和显示结束日期动态添加的月份。

My effort so far:

视图模型:

function calculation() {
var self = this;
self.months= ko.observable("");
self.StartDate = ko.observable("");  // On my get i get startdate like **2014-06-24**
         self.EndDate = ko.computed(function () {
            return  self.StartDate() + ?? // i have no clue how to add 
        });

我的cshtml代码:

  <input type="text" data-bind="value:$data.StartDate" />
  <input type="text" data-bind="value:$data.EndDate" />

编辑:下面的建议,我试过这样做,但格式不符合标记遗憾

 self.EndDate = ko.computed(function () {
            var date = new Date(self.StartDate());
            date.setMonth(date.getMonth() + 8); // tried static 
            return date.toLocaleDateString() ;
        });

我得到了类似于2015年2月24日的东西,但我希望是2015-02-24,因为我以相同的格式通过了日期

欢迎提出建议

您必须考虑到随日期而来的各种边缘情况。例如,10月31日+ 1个月显然不是11月31日。然后你必须考虑到二月的天数取决于它是否是闰年。

看看Jazaret在这个问题中的答案,找出x个月后的确切日期:

如何在JavaScript中添加月份到日期?

然后你可以添加到你的代码:

self.EndDate = ko.computed(function () {
    var date = new Date(self.StartDate());
    return  date.addMonths(5); // add however months you want
});

添加月份(例如将一个月添加到1月31日)可能会溢出days字段,并导致月份增加(在本例中,您将获得3月份的日期)。如果你想添加月份,然后溢出日期,那么。setmonth (base_date.getMonth()+monthsToAdd)可以工作,但当人们谈论增量月份时,很少会想到这一点。

当我不想超出月份时,我使用这个来为日期添加月份:

function addMonthsNoOverflow(dateParam, intParam) {
    var sum = new Date(new Date(dateParam.getTime()).setMonth(dateParam.getMonth() + intParam);
    if (sum.getDate() < dateParam.getDate()) {  sum.setDate(0);  }
    return(sum);
}

指出:它通过消除溢出来处理29、30或31变成1、2或3的情况月的一天不是零索引,所以。setdate(0)是前一个月的最后一天。

http://jsfiddle.net/zjdj3zxz/1/

下面是一个向日期添加月份的基本示例:

JSFiddle

操纵代码:

var ViewModel = function () {
    var self = this;
    self.StartDate = ko.observable(new Date("2014-06-24"));
    self.EndDate = ko.computed(function () {
        var myDate = new Date(self.StartDate());
        myDate.setMonth(myDate.getMonth() + 5)
        return myDate;
    });
};
$(function () {
    var vm = new ViewModel();
    ko.applyBindings(vm);
});

正如@AndrewC在他的帖子中所说,这并不包括边缘情况,你将不得不考虑每个月的不同天数,并根据你的需求处理它们。

编辑:请在您的项目中包含Moment.js库。这样,日期的计算和格式将非常容易。看一下文档中的例子就知道了。

所以,我相信这就是你想要的:

http://jsfiddle.net/

var ViewModel = function(date, noOfMonths) {
    this.calculation = ko.computed(function(){
    var m = moment(date);
    return m.add('months',noOfMonths).format('YYYY-MM-DD');
    },this);
};
ko.applyBindings(new ViewModel(new Date('7/31/2014 17:15:00'), 4));