首頁  >  文章  >  web前端  >  如何在 JavaScript 中將給定兩個日期之間存在的所有日期儲存在陣列中?

如何在 JavaScript 中將給定兩個日期之間存在的所有日期儲存在陣列中?

PHPz
PHPz轉載
2023-09-03 12:45:101110瀏覽

如何在 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 –此外,將 1 天的毫秒數加到 currentMillis 中。

第 5 步 – 使用 currentMillis 建立一個新日期,並將其推送到 for 迴圈中的 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>

以上是如何在 JavaScript 中將給定兩個日期之間存在的所有日期儲存在陣列中?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除