Javascript 如何处理循环中的时刻日期?

Javascript 如何处理循环中的时刻日期?,javascript,knockout.js,momentjs,Javascript,Knockout.js,Momentjs,我很难弄明白这一点。我想根据指定的时间段获取两个日期的差异 我已经在下面的片段。每当我单击该按钮时,它都应该使用差异(基于指定的周期)填充数组 但是,现在发生的是,一旦我点击按钮,它填充了相同的日期。有什么想法吗 var fooObj=function(){ var self=这个; self.month=ko.observable(); self.formatted=ko.computed(函数(){ 返回月份().格式('ddd,DD-MMM-YYYY'); }); }; var vm=(

我很难弄明白这一点。我想根据指定的时间段获取两个日期的差异

我已经在下面的片段。每当我单击该按钮时,它都应该使用差异(基于指定的周期)填充数组

但是,现在发生的是,一旦我点击按钮,它填充了相同的日期。有什么想法吗

var fooObj=function(){
var self=这个;
self.month=ko.observable();
self.formatted=ko.computed(函数(){
返回月份().格式('ddd,DD-MMM-YYYY');
});
};
var vm=(函数(){
var startDate=ko.可观测(时刻([2015,10,1]),
startDateFormat=ko.computed(函数(){
返回startDate().format('ddd,DD-MMM-YYYY');
}),
endDate=ko.observable(startDate().add(5,‘天’)),
endDateFormat=ko.computed(函数(){
返回endDate().格式('ddd,DD-MMM-YYYY');
}),
dateDiff=endDate().diff(startDate(),'days'),
foo=ko.observearray(),
测试=函数(){

对于(var i=0;i来说,您似乎陷入了一个微妙的语法陷阱,这是一个很容易犯错误的陷阱。
moment.js
提供了方法链接语法,它为您的案例提供了混乱的根源

例如,根据
startDate
,以这种方式设置
endDate
的默认值时:

endDate=ko.observable(startDate().add(5,'days'))

您没有得到预期的结果,因为方法链接为您提供了原始值,然后再增加5天

相反,如果您克隆
瞬间
对象,然后添加,您将得到我相信您期望的结果:

endDate=ko.可观察(时刻(startDate()).add(5,'days'))

您还需要在
test
方法的循环内执行相同的操作:

foo.push(矩(startDate()).add(i,'days');//使用索引变量i表示天数

完整的可运行示例如下所示:

var vm=(函数(){
var startDate=ko.可观测(时刻([2015,10,1]),
startDateFormat=ko.computed(函数(){
返回startDate().format('ddd,DD-MMM-YYYY');
}),
//确保在添加之前克隆startDate
endDate=ko.可观测(时刻(startDate()).add(5,‘天’)),
endDateFormat=ko.computed(函数(){
返回endDate().格式('ddd,DD-MMM-YYYY');
}),
dateDiff=endDate().diff(startDate(),'days'),
foo=ko.observearray(),
测试=函数(){

对于(var i=0;i来说,您似乎陷入了一个微妙的语法陷阱,这是一个很容易犯错误的陷阱。
moment.js
提供了方法链接语法,它为您的案例提供了混乱的根源

例如,根据
startDate
,以这种方式设置
endDate
的默认值时:

endDate=ko.observable(startDate().add(5,'days'))

您没有得到预期的结果,因为方法链接为您提供了原始值,然后再增加5天

相反,如果您克隆
瞬间
对象,然后添加,您将得到我相信您期望的结果:

endDate=ko.可观察(时刻(startDate()).add(5,'days'))

您还需要在
test
方法的循环内执行相同的操作:

foo.push(矩(startDate()).add(i,'days');//使用索引变量i表示天数

完整的可运行示例如下所示:

var vm=(函数(){
var startDate=ko.可观测(时刻([2015,10,1]),
startDateFormat=ko.computed(函数(){
返回startDate().format('ddd,DD-MMM-YYYY');
}),
//确保在添加之前克隆startDate
endDate=ko.可观测(时刻(startDate()).add(5,‘天’)),
endDateFormat=ko.computed(函数(){
返回endDate().格式('ddd,DD-MMM-YYYY');
}),
dateDiff=endDate().diff(startDate(),'days'),
foo=ko.observearray(),
测试=函数(){

对于(var i=0;这并不是我所说的一个很好的最小化问题,但是我可以向你们建议,在我自己使用moment时,这很好:
var beg=moment(Date1,Format);var end=moment(Date2,Format);var diff_seconds=end.diff(beg)
@Michael你知道为什么我一按按钮就得到了相同的日期吗?无论如何,我会尝试你的建议,不太可能,除非你的代码自己运行并调试。@Michael我想知道出了什么问题。这与变矩变量有关吗?这并不是我所说的一个完全最小化的问题,怎么了无论如何,我可以向您建议,在我自己使用矩的时候,这很好:
var beg=moment(Date1,Format);var end=moment(Date2,Format);var diff_seconds=end.diff(beg)
@Michael你知道为什么我一按按钮就得到了相同的日期吗?不管怎样,我会尝试你的建议,不太可能,不让你的代码自己运行并调试。@Michael我想知道出了什么问题。这与突变时刻变量有关吗?我明白了。所以这与克隆日期有关。如果我不使用克隆,它也会改变原始值?我明白了。所以它与克隆日期有关。所以如果我不使用克隆,它也会改变原始值?