JavaScript 如何存储给定两个日期之间的数组中的所有日期

JavaScript 如何存储给定两个日期之间的数组中的所有日期

有时,我们需要获得给定日期范围内的所有日期。在本教程中,我们将取两个日期并找到两个日期之间的所有日期。同时,我们将在数组中存储所有的日期。

在这里,我们将学习三种方法来存储给定两个日期之间的数组中的所有日期。

使用while循环和setDate()方法

我们可以使用while循环进行迭代,并使用setDate()方法来设置日期对象中的日期。在while循环的每一次迭代中,我们可以将日期增加一天并将其设置为date1。

语法

用户可以按照下面的语法来使用while循环和setDate()方法来获取两个日期之间的所有日期。

while (date1 <= date2) {
   dateArray.push(new Date(date1));
   date1.setDate(date1.getDate() + 1);
} 

在上述语法中,date1是开始日期,date2是结束日期。

算法

第1步 - 创建两个日期。

第2步 - 使用while循环,并检查date1是否小于date2。

第 3步 - 从date1创建一个新的日期,并将其推到dateArray中。

第 4 步 – 使用getDate()方法从date1获取日期,并添加1。

第 5 步 – 使用setDate()方法来设置一个新的日期。

例子1

在下面的例子中,我们使用Date对象创建了date1和date2。之后,我们实现了上述算法以获得两个日期之间的所有日期。在输出中,用户可以观察到date1和date2之间的所有日期。

<html>
<body>
   <h2>Using the <i> setDate() method and while loop</i> to get all dates between two dates in the array format. </h2>
   <div id = "output"></div>
   <script>
      var output = document.getElementById('output');
      var date1 = new Date("2023-01-01");
      var date2 = new Date("2023-01-11");
      output.innerHTML += "The date1 is " + date1 + "<br/>";
      output.innerHTML += "The date2 is " + date2 + "<br/>";
      var dateArray = [];
      while (date1 <= date2) {
         dateArray.push(new Date(date1));
         date1.setDate(date1.getDate() + 1);
      }
      output.innerHTML += "The date array is <br/>";
      for (let i = 0; i < dateArray.length; i++) {
         output.innerHTML += dateArray[i] + " <br/>";
      }
   </script>
</body>
</html>

使用for循环和日期的总毫秒数

在这种方法中,我们将得到第一个和第二个日期的总毫秒数。之后,我们将不断把1天的毫秒加入到当前日期的总毫秒中,并使用新的毫秒,我们可以创建一个日期。

这样,我们就可以找到给定的两个日期之间的所有日期,并将它们存储在数组中。

语法

用户可以按照下面的语法来使用for循环和日期的总毫秒数来获得两个日期之间的所有日期。

for (var currentMillis = startMillis; currentMillis < lastMillis; currentMillis += milliOf1Day) {
   // pushing updated date to the array
   dateArray.push(new Date(currentMillis));
} 

在上述语法中,milliOf1Day是一天的总毫秒数。

算法

第1步 --获取当前日期和最后日期的总毫秒数。

第2步 --使用for循环,用开始日期的总毫秒数初始化currentMillis变量。

第 3 步–使用for循环进行迭代,直到我们发现当前的毫秒数小于最后日期的毫秒数。

第4步 -同时,在currentMillis中加入1天的毫秒。

第5步 -用currentMillis创建一个新的日期,并推送到for a循环的dateArray变量中。

例2

在这个例子中,我们有一个milliOf1Day变量,我们在其中存储了1天的总毫秒数。之后,我们使用for循环和毫秒来实现上述算法,以获得两个日期之间的所有日期。

<html>
<body>
   <h2>Using the <i> setDate() method and while loop </i> to get all dates between two dates in the array format. </h2>
   <div id = "output"></div>
   <script>
      var output = document.getElementById('output');
      var firstDate = new Date("2022-11-01");
      var secondDate = new Date("2022-11-07");
      function getArrayOfDates(firstDate, secondDate) {

         // calculate milli seconds of 1 day
         var milliOf1Day = 24 * 60 * 60 * 1000;

         // calculate the total milliseconds of the start and end date
         let startMillis = firstDate * 1;
         let lastMillis = secondDate * 1;
         var dateArray = [];

         // In the for-loop, on every iteration, add the total milli seconds of 1 day to current milliseconds, and create a new date
         for (var currentMillis = startMillis; currentMillis < lastMillis;         currentMillis += milliOf1Day) {

            // pushing updated date to the array
            dateArray.push(new Date(currentMillis));
         } 
         return dateArray;
      }
      let dates = getArrayOfDates(firstDate, secondDate)
      output.innerHTML += "The firstDate is " + firstDate + "<br/>";
      output.innerHTML += "The secondDate is " + secondDate + "<br/>";
      output.innerHTML += "The date array is <br/>";

      // printing the date array
      for (let i = 0; i < dates.length; i++) {
         output.innerHTML += dates[i] + " <br/>";
      }
   </script>
</body>
</html>

使用 momentJS 库

momentJS库允许我们对日期进行操作。

语法

用户可以按照下面的语法来使用 momentJS 库来获得两个日期之间的所有日期。

while (currentDate.add(1, "days").diff(lastDate) < 0) { 
   allDates.push(currentDate.clone().toDate());
}

在上述语法中,我们使用了 momentJS 库的 add()和 diff() 方法。

例子3

在下面的例子中,我们从用户那里得到了开始和最后的日期。之后,我们使用输入的日期,并使用 momentJS 库创建日期。

接下来,我们使用add()方法在当前日期上增加一天。另外,我们使用diff()方法来获取当前日期和最后日期之间的差异。

<html>
<head>
   <script src ="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
   <script src = "https://cdnjs.cloudflare.com/ajax/libs/momentrange/4.0.1/moment-range.js"> </script>
</head>
<body>
   <h2>Using the <i> setDate() method and while loop </i> to get all dates between two dates in the array format. </h2>
   <div id="output"> </div>
   <button onclick="getArrayOfDates()"> Get array of Dates</button>
   <script>
      var output = document.getElementById('output');
      function getArrayOfDates() {
         let allDates = [];
         let startDate = prompt("Enter start date in the MM / DD / YYYY format", "09/23/2022");
         let endDate = prompt("Enter end date in the MM / DD / YYYY format ", "10/23/2022");

         // create a new date from the custom input
         let currentDate = moment.utc(new Date(startDate)).startOf("day"); 
         let lastDate = moment.utc(new Date(endDate)).startOf("day");

         // add one day to the current date and check the difference between the current date and the last date
         while (currentDate.add(1, "days").diff(lastDate) < 0) {
            allDates.push(currentDate.clone().toDate());
         }
         allDates.push(currentDate.clone().toDate());
         output.innerHTML += "The currentDate is " + currentDate + "<br/>";
         output.innerHTML += "The lastDate is " + lastDate + "<br/>";
         output.innerHTML += "The date array is <br/>";
         for (let i = 0; i < allDates.length; i++) {
            output.innerHTML += allDates[i] + " <br/>";
         }
      }
   </script>
</body>
</html>

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

JavaScript 教程