Javascript 使用linq.js和momentjs从2个日期创建日期范围
我想得到开始日期和结束日期之间的所有日期 我再次用矩()包装startDate/endDate以克隆开始/结束日期,因为它们不能更改 但是getDateRange仍然会给我一些关于日期的奇怪结果:Javascript 使用linq.js和momentjs从2个日期创建日期范围,javascript,momentjs,linq.js,Javascript,Momentjs,Linq.js,我想得到开始日期和结束日期之间的所有日期 我再次用矩()包装startDate/endDate以克隆开始/结束日期,因为它们不能更改 但是getDateRange仍然会给我一些关于日期的奇怪结果: testCase.startDate = moment(new Date(2014, 0, 1)); testCase.endDate = moment(new Date(2014, 0, 27)); 虽然这两个日期都在2014年,但我得到的日期范围是2013年12月 为什么呢 functio
testCase.startDate = moment(new Date(2014, 0, 1));
testCase.endDate = moment(new Date(2014, 0, 27));
虽然这两个日期都在2014年,但我得到的日期范围是2013年12月
为什么呢
function getDateRange(startDate, endDate) {
return Enumerable.range(0, moment(endDate).diff(moment(startDate), 'days') + 1)
.select(function (offset) {
return moment(startDate).add(offset, 'days')
})
.toArray();
}
更新
您的查询看起来应该可以运行。也许你对日期的解释不正确。请记住,只有月份开始于
0
。当你看价值的时候,也许你也抵消了这一年
下面是编写查询的另一种方法:
function getDateRange(startDate, endDate) {
return Enumerable.Unfold(startDate, "moment($).add(1, 'd')")
.TakeWhile(function (d) { return d <= endDate; })
.ToArray();
}
我添加了一个截图,这样你就可以判断自己了!嗯,我不知道为什么会发生这种情况,特别是在这么大的偏移量下。也许可以尝试使用所有utc日期?看看这是否有区别。这是我一直用来测试的。我目前在太平洋时区(UTC-7),但我认为这不重要。我用我的linq方法更新了你的小提琴。和你的结果一样都很好:/我看到你使用了一个旧的linq版本,为什么会这样?那应该是最新的稳定版本(2.2),我的所有测试仍然使用它。3仍处于测试阶段,所以我还没有进行转换。但是这不会有太大的区别,只是为了我们的目的需要更改方法名的情况。
// without cloning
var date1 = moment.utc([2014, 0, 1]);
console.log(String(date1)); // Wed Jan 01 2014 00:00:00 GMT+0000
var startOfDate1 = date1.startOf('week'); // mutated
console.log(String(date1)); // Sun Dec 29 2013 00:00:00 GMT+0000
// using moment()
var date2 = moment.utc([2014, 0, 1]);
console.log(String(date2)); // Wed Jan 01 2014 00:00:00 GMT+0000
var startOfDate2 = moment(date2).startOf('week'); // not mutated
console.log(String(date2)); // Wed Jan 01 2014 00:00:00 GMT+0000
// using clone()
var date3 = moment.utc([2014, 0, 1]);
console.log(String(date3)); // Wed Jan 01 2014 00:00:00 GMT+0000
var startOfDate3 = date3.clone().startOf('week'); // not mutated
console.log(String(date3)); // Wed Jan 01 2014 00:00:00 GMT+0000