代码之家  ›  专栏  ›  技术社区  ›  Blues Clues

在js中使用两个日期获得天数

  •  1
  • Blues Clues  · 技术社区  · 7 年前

    我遇到了这样的麻烦,我只能在指定的两个日期之间获得天数。请参见下面的代码:

    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 回复  |  直到 7 年前
        1
  •  2
  •   31piy    7 年前

    toISOString 以UTC格式表示日期。您可能处于正时区偏移量,这就是为什么您的日期对象的UTC表示是休息日。你可以用 toLocaleString 而是在你的时区代表你的日期。

    另一个问题是 Array.prototype.map 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);