Vanilla JavaScript:從日期中添加或減去天數(以及更多)

Vanilla JavaScript:從日期中添加或減去天數(以及更多)

在最近的教程中,我們學習了如何獲取和設置任何 date 對象的月、日、年和時間的值。獲取和設置這些日期值的能力在許多情況下都會派上用場。例如,您可以將特殊事件的日期存儲在變量中。您還可以使用這些方法來顯示當前日期和時間或對一段時間進行加減操作。

在本教程中,我們的重點將是學習如何從指定日期添加或減去一段時間,例如年、月、日、小時和分鐘。

如何向日期添加年、月和日

您可能還記得我們的其他教程中,JavaScript 具有 setFullYear() 和 getFullYear() 等方法,您可以使用它們來設置和獲取特定日期的當前全年。您可以使用 setMonth() 和 getMonth() 等方法來設置和獲取特定日期的當前月份。同樣,您可以使用 setDate() 和 getDate() 方法來設置和獲取月份中的日期。

讓我們編寫一個函數,為日期添加年份。它將接受您想要添加的日期和年數作為其參數并返回新日期。

立即學習Java免費學習筆記(深入)”;

function addYearsToDate(date, years) {    let new_date = new Date(date);    new_date.setFullYear(new_date.getFullYear() + years);     return new_date; }  let today = new Date(); let five_years_later = addYearsToDate(today, 5);  // Outputs: Date Wed Jun 07 2023 19:04:56 GMT+0530 (India Standard Time) console.log(today);  // Outputs: Date Wed Jun 07 2028 19:04:56 GMT+0530 (India Standard Time) console.log(five_years_later); 

這里需要注意的重要一點是使用 Date() 構造函數創建一個新的 Date 對象,該對象被分配給變量 new_date。只需將 new_date 的值設置為給定的 date 就會導致它們都指向同一個 Date 對象。

我們將使用相同的邏輯創建 addMonthsToDate() 函數,該函數接受日期和要添加的月數作為參數并返回新日期。

 function addMonthsToDate(date, months) {    let new_date = new Date(date);    new_date.setMonth(new_date.getMonth() + months);     return new_date; }  let today = new Date(); let five_months_later = addMonthsToDate(today, 5); let fifty_months_later = addMonthsToDate(today, 50);  // Outputs: Date Wed Jun 07 2023 19:15:04 GMT+0530 (India Standard Time) console.log(today);  // Outputs: Date Tue Nov 07 2023 19:15:04 GMT+0530 (India Standard Time) console.log(five_months_later);  // Outputs: Date Sat Aug 07 2027 19:15:04 GMT+0530 (India Standard Time) console.log(fifty_months_later);  

正如我在其他教程中提到的,setMonth() 方法遇到的任何溢出都會導致給定日期添加適當的年數。這就是我們將日期加上 50 個月后所發生的情況。它使我們的約會日期增加了 4 年零 2 個月。

現在,讓我們編寫一個函數,將給定的天數添加到我們指定的日期并返回一個新日期:

function addDaysToDate(date, days) {    let new_date = new Date(date);    new_date.setDate(new_date.getDate() + days);     return new_date; }  let today = new Date(); let five_days_later = addDaysToDate(today, 5); let thousand_days_later = addDaysToDate(today, 1000);  // Outputs: Date Wed Jun 07 2023 19:29:12 GMT+0530 (India Standard Time) console.log(today);  // Outputs: Date Wed Jun 07 2023 19:29:12 GMT+0530 (India Standard Time) console.log(five_days_later);  // Outputs: Date Wed Jun 07 2023 19:29:12 GMT+0530 (India Standard Time) console.log(thousand_days_later); 

在我們的日期中添加任何時間段

我們定義了三個新函數,允許我們在 JavaScript 中向給定日期添加年、月或日。您可能想在日期中添加一些其他時間段或持續時間,例如小時、分鐘或秒。為它們再編寫三個函數是沒有意義的。

以下函數可用于將任意時間段添加到指定日期:

function addPeriodToDate(date, {years = 0, months = 0, days = 0, hours = 0, minutes = 0, seconds = 0}) {    let new_date = new Date(date);        new_date.setFullYear(new_date.getFullYear() + years);    new_date.setMonth(new_date.getMonth() + months);    new_date.setDate(new_date.getDate() + days);    new_date.setHours(new_date.getHours() + hours);    new_date.setMinutes(new_date.getMinutes() + minutes);    new_date.setSeconds(new_date.getSeconds() + seconds);     return new_date; }   let today = new Date(); // Outputs: Date Wed Jun 07 2023 20:18:24 GMT+0530 (India Standard Time) console.log(today);  let period = {years: 1, months: 2, days: 3}; let new_date = addPeriodToDate(today, period); // Outputs: Date Sat Aug 10 2024 20:18:24 GMT+0530 (India Standard Time) console.log(new_date);  period = {years: 4, months: 22}; new_date = addPeriodToDate(today, period); // Outputs: Date Sat Apr 07 2029 20:18:24 GMT+0530 (India Standard Time) console.log(new_date);  period = {days: 4, seconds: 22}; new_date = addPeriodToDate(today, period); // Outputs: Date Sun Jun 11 2023 20:18:46 GMT+0530 (India Standard Time) console.log(new_date); 

如您所見,上述函數會為您處理任何溢出問題。也無需為所有時間單位提供值,因為默認情況下它們設置為 0。這意味著我們可以簡單地傳遞我們想要添加的天數和秒數,同時跳過所有其他值。

從我們的日期中減去任何時間段

我們不需要編寫任何單獨的函數來從日期中減去任意時間段。您可以使用上一節中的函數來減去年、月、日、小時、分鐘或秒。您需要做的就是提供該期間的負值。以下是一些示例:

period = {years: -1, months: -2, days: -3}; new_date = addPeriodToDate(today, period);  // Outputs: Date Mon Apr 04 2022 20:18:24 GMT+0530 (India Standard Time) console.log(new_date);  period = {years: -4, months: -22}; new_date = addPeriodToDate(today, period);  // Outputs: Date Mon Aug 07 2017 20:18:24 GMT+0530 (India Standard Time) console.log(new_date);  period = {days: -4, seconds: -22}; new_date = addPeriodToDate(today, period);  // Outputs: Date Sat Jun 03 2023 20:18:02 GMT+0530 (India Standard Time) console.log(new_date);  

最終想法

在本教程中,我們學習了兩種不同的方法來解決 JavaScript 中日期加減年、月、日等問題。如果您只想添加或減去年份,您可以考慮創建一個像 addYearsToDate() 這樣的函數,專門簡單地執行此操作。另一種方法是創建一個更通用的 addPeriodToDate() 函數,它可以處理不同的時間單位。

? 版權聲明
THE END
喜歡就支持一下吧
點贊13 分享