【问题标题】:Creating an array of dates between 2 dates创建两个日期之间的日期数组
【发布时间】:2018-10-19 15:26:04
【问题描述】:

我有 2 个日期:开始日期和结束日期。结束日期总是比开始日期小一天。因此,如果我的开始日期是 19 日,那么结束日期将是下个月的 18 日。

我正在尝试创建两个日期之间的天数数组。 (每个月的19号到18号,然后18号到18号计算差额)

Example

2018 年 8 月 19 日 - 2018 年 9 月 18 日 = 30 天

2018 年 9 月 18 日 - 2019 年 10 月 18 日 = 30 天

10/18/2018 - 11/18/2018 = 31 天

数组 = [30,30,31]

我正在使用以下代码来计算日期之间的天数差异。

  function daysBetweenArrears (date1, date2){

         date1.setDate(date1.getDate() );
         date2.setDate(date2.getDate() - 1);
         var Diff = Math.abs(date2.getTime() - date1.getTime());
         var TimeDifference = Math.round(Diff / (1000 * 3600 * 24));
         return TimeDifference;
    }

以下创建数组的代码

  if (document.getElementById("endDate"))
             y = document.getElementById("endDate").value;
          if (document.getElementById("startDate"))
             z = document.getElementById("startDate").value;

var dateArr = getDateArray(z, y);
     var dayCountArr = "";
     var b = [];

     for (var x = 0; x < dateArr.length-1; x++)
     {
         dayCountArr += daysBetweenArrears(dateArr[x], dateArr[x+1], ",");
         b.push(daysBetweenArrears(dateArr[x], dateArr[x+1]));
     }

问题是当我将日期设置如下时,它给了我不正确的输出。问题在于,每当它进入下个月时,它都会错误地设置日期。我不确定我在这里做错了什么。任何帮助是极大的赞赏。谢谢你。

date2.setDate(date2.getDate() - 1);

【问题讨论】:

  • 您的示例日期令人困惑,因为它们没有按照您所说的进行。有些日期相隔一年以上。
  • @Herohtar 他们相差一年怎么办?它只增加了 3 个月。
  • 再看看。你有8/19/2018 - 9/18/2019等。年代不一样。
  • @Herohtar 哦,谢谢。我刚刚解决了这个问题。

标签: javascript


【解决方案1】:

您可以使用 moment.希望这会有所帮助。

const start = "8/19/2018";
const end = "11/18/2018 ";

const dates = [];

const mstart = moment(new Date(start));
const mend = moment(new Date(end));

for (let i = 0; mstart < mend ; i++) {

    const daysInMonth = mstart.daysInMonth() + (i === 0 ? -1 : 0);

    dates.push(daysInMonth);

    mstart.add(1, 'M');
}

console.log(dates);
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"&gt;&lt;/script&gt;

【讨论】:

  • 该数组中的第一个数字应该是 30 而不是 31,因为日期是从 19 日到 18 日。
  • @ace23 更新了答案。如果这对您有帮助,请告诉我。
  • 我试过这个。它可以工作,但由于某种原因,如果我尝试查看日期范围,它会崩溃,而且我也无法添加任何 if else 语句!
  • @ace23 你能举一个你试过的例子吗? “查看日期范围”是什么意思?
  • 日期范围 = 8/19/2018 , 9/19/2018,10/19/2019...我尝试为此添加 if else 条件,但代码崩溃了。
【解决方案2】:

您可以更新您的函数 daysBetweenArrears

const daysBetweenArrears = (date1, date2) => {
  const time1 = new Date(date1).getTime();
  const time2 = new Date(date2).getTime();
  const diff = Math.abs(time2 - time1);
  return Math.round(diff/(1000*60*60*24));
};

console.log(daysBetweenArrears('8/18/2018', '9/18/2018'));
console.log(daysBetweenArrears('6/18/2018', '7/18/2018'));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    • 2018-10-12
    • 1970-01-01
    • 2013-01-05
    • 1970-01-01
    相关资源
    最近更新 更多