在JS中使用两个日期获取日期

时间:2018-08-24 05:29:24

标签: javascript jquery

我遇到了麻烦,我只能得到指定的2个日期之间的日期。请参见下面的代码:

var getDaysArray = function(start, end) {
  for (var arr = [], dt = start; dt <= end; dt.setDate(dt.getDate() + 1)) {
    arr.push(new Date(dt));
  }
  return arr;
};

var daylist = getDaysArray(new Date('08/13/2018'), new Date('08/17/2018'));
daylist.map((v) => v.toISOString().slice(0, 10)).join("");
console.log(daylist);

上面的代码输出为:

enter image description here

预期的输出(由于开始日期08/13/2018和结束日期08/17/2018):

0: Date 2018-08-13T16:00:00.000Z
1: Date 2018-08-14T16:00:00.000Z
2: Date 2018-08-15T16:00:00.000Z
3: Date 2018-08-16T16:00:00.000Z
4: Date 2018-08-17T16:00:00.000Z

注意:上面的代码来自某个地方的SO答案之一。

1 个答案:

答案 0 :(得分:2)

toISOString代表UTC格式的日期。您可能处于正时区偏移中,这就是为什么日期对象的UTC表示会休息一天的原因。您可以使用toLocaleString来表示您的时区中的日期。

另一个问题是Array.prototype.map重新调整了一个新数组,而您忘记分配给该数组daylist如果没有分配,将不会对daylist进行任何更改。

下面的代码段根据您的要求工作。

var getDaysArray = function(start, end) {
  for (var arr = [], dt = start; dt <= end; dt.setDate(dt.getDate() + 1)) {
    arr.push(new Date(dt));
  }
  return arr;
};

var daylist = getDaysArray(new Date('08/13/2018'), new Date('08/17/2018'));
daylist = daylist.map((v) => v.toLocaleString());
console.log(daylist);