-1

我想获取 startDate 和 endDate 之间的所有日期。

我再次用 moment() 包装 startDate/endDate 以克隆 start/endDate,因为它们不能被更改。

但是 getDateRange 仍然给我关于日期的奇怪结果:

 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();
  }

更新

在此处输入图像描述

4

1 回答 1

0

您的查询看起来应该可以工作。也许您错误地解释了日期。请记住,只有月份从 开始0。当您查看这些值时,也许您也抵消了年份。

这是编写查询的另一种方法:

function getDateRange(startDate, endDate) {
    return Enumerable.Unfold(startDate, "moment($).add(1, 'd')")
        .TakeWhile(function (d) { return d <= endDate; })
        .ToArray();
}

根据我在评论中看到的内容,您似乎正在使用改变日期的方法。您要么想要避免使用这些方法,要么先克隆日期并操作克隆。

// 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
于 2015-03-26T23:56:12.327 回答