一、日期類型和格式化
JS中日期類型是Date對象,可以通過如下方式創建:
let date1 = new Date(); // 當前時間 let date2 = new Date('2021/01/01'); // 指定日期 let date3 = new Date('2021-01-01'); // 指定日期 let date4 = new Date('2021-01-01T00:00:00'); // 指定日期和時間 let date5 = new Date(2021, 0, 1); // 指定年月日 let date6 = new Date(2021, 0, 1, 0, 0, 0); // 指定年月日時分秒
日期對象可以使用一系列方法進行格式化,常見的有以下幾種:
let date = new Date('2021/01/01'); date.toDateString(); // "Fri Jan 01 2021" date.toISOString(); // "2021-01-01T00:00:00.000Z" date.toLocaleDateString(); // "1/1/2021" date.toLocaleString(); // "1/1/2021, 8:00:00 AM" date.toLocaleTimeString(); // "8:00:00 AM" date.toString(); // "Fri Jan 01 2021 08:00:00 GMT+0800 (GMT+08:00)" date.valueOf(); // 1609459200000
二、計算日期相差天數
當我們要計算兩個日期相差的天數時,可以通過兩種方式實現:
1. 使用Math.floor()函數實現
function getDays1(date1, date2) { let time1 = date1.getTime(); let time2 = date2.getTime(); let diff = Math.abs(time1 - time2); return Math.floor(diff / (24 * 60 * 60 * 1000)); }
使用Math.abs()函數來獲取兩個日期之間的時間差,然後使用Math.floor()函數將時間差轉換為天數。
2. 使用整除和取余運算實現
function getDays2(date1, date2) { let time1 = date1.getTime(); let time2 = date2.getTime(); let diff = Math.abs(time1 - time2); let day = 24 * 60 * 60 * 1000; return parseInt(diff / day) + (diff % day > 0 ? 1 : 0); }
使用parseInt()函數將時間差轉換為天數,如果有不滿一天的時間差,天數需要加1。
三、處理閏年問題
閏年是指可以被400整除的年份,或者可以被4整除但不能被100整除的年份。在計算日期相差天數時,需要考慮閏年的情況,否則會出現誤差。
function isLeapYear(year) { return (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0); } function getDays3(date1, date2) { let time1 = date1.getTime(); let time2 = date2.getTime(); let diff = Math.abs(time1 - time2); let day = 24 * 60 * 60 * 1000; let days = parseInt(diff / day); let multiplier = 1; for (let year = Math.min(date1.getFullYear(), date2.getFullYear()); year < Math.max(date1.getFullYear(), date2.getFullYear()); year++) { if (isLeapYear(year)) { multiplier++; } } return days + multiplier; }
使用isLeapYear()函數判斷是否為閏年,如果是,從天數中加上1。然後使用循環處理兩個日期之間的閏年數量,從天數中加上閏年數量。
四、時區問題
在不同的時區中,同一個時間對應的UTC時間是不同的,因此當我們需要比較不同時區中的日期時,需要先將其轉換為同一時區中的UTC時間。
function getDays4(date1, date2) { let time1 = date1.getTime(); let time2 = date2.getTime(); let diff = Math.abs(time1 - time2); let day = 24 * 60 * 60 * 1000; let days = parseInt(diff / day); let tz1 = date1.getTimezoneOffset() / 60; let tz2 = date2.getTimezoneOffset() / 60; let utc1 = time1 + tz1 * 60 * 60 * 1000; let utc2 = time2 + tz2 * 60 * 60 * 1000; return parseInt(Math.abs(utc1 - utc2) / day) + days; }
使用getTimezoneOffset()函數獲取時區偏移量,將時間轉換為UTC時間後,再計算日期相差天數。
五、總結
通過以上幾種方式,我們可以實現JS中日期相減計算天數的功能,並且可以處理常見的問題,如閏年和時區問題。在實際開發中,可以根據需要選擇使用不同的方法。
原創文章,作者:KNNQK,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/371830.html