@brggroup/share-lib 0.1.16 → 0.1.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -2049,6 +2049,44 @@ class DateTimeHelper {
|
|
|
2049
2049
|
}
|
|
2050
2050
|
return d1.getTime() === d2.getTime();
|
|
2051
2051
|
}
|
|
2052
|
+
static dateDiff(date1, date2, unit = 'day') {
|
|
2053
|
+
// 1. Kiểm tra tham số đầu vào
|
|
2054
|
+
if (!date1 || !date2) {
|
|
2055
|
+
return NaN;
|
|
2056
|
+
}
|
|
2057
|
+
const d1 = new Date(date1);
|
|
2058
|
+
const d2 = new Date(date2);
|
|
2059
|
+
if (isNaN(d1.getTime()) || isNaN(d2.getTime())) {
|
|
2060
|
+
throw new Error('Tham số ngày không hợp lệ (Invalid Date)');
|
|
2061
|
+
}
|
|
2062
|
+
// 2. Tính chênh lệch mili-giây mặc định (date1 - date2)
|
|
2063
|
+
let diffMs = d1.getTime() - d2.getTime();
|
|
2064
|
+
// 3. Xử lý chuẩn hóa riêng cho "ngày" để tránh sai lệch múi giờ
|
|
2065
|
+
if (unit === 'day') {
|
|
2066
|
+
const utc1 = Date.UTC(d1.getFullYear(), d1.getMonth(), d1.getDate());
|
|
2067
|
+
const utc2 = Date.UTC(d2.getFullYear(), d2.getMonth(), d2.getDate());
|
|
2068
|
+
diffMs = utc1 - utc2;
|
|
2069
|
+
}
|
|
2070
|
+
// 4. Các hằng số quy đổi từ mili-giây
|
|
2071
|
+
const MS_PER_SECOND = 1000;
|
|
2072
|
+
const MS_PER_MINUTE = MS_PER_SECOND * 60;
|
|
2073
|
+
const MS_PER_HOUR = MS_PER_MINUTE * 60;
|
|
2074
|
+
const MS_PER_DAY = MS_PER_HOUR * 24;
|
|
2075
|
+
// 5. Tính toán và trả về kết quả dựa trên unit
|
|
2076
|
+
// Sử dụng Math.trunc() thay vì Math.floor() để giữ đúng phần nguyên trong trường hợp kết quả âm
|
|
2077
|
+
switch (unit) {
|
|
2078
|
+
case 'day':
|
|
2079
|
+
return Math.trunc(diffMs / MS_PER_DAY);
|
|
2080
|
+
case 'hour':
|
|
2081
|
+
return Math.trunc(diffMs / MS_PER_HOUR);
|
|
2082
|
+
case 'minute':
|
|
2083
|
+
return Math.trunc(diffMs / MS_PER_MINUTE);
|
|
2084
|
+
case 'second':
|
|
2085
|
+
return Math.trunc(diffMs / MS_PER_SECOND);
|
|
2086
|
+
default:
|
|
2087
|
+
throw new Error("Đơn vị tính không hợp lệ. Vui lòng dùng 'day', 'hour', 'minute', hoặc 'second'.");
|
|
2088
|
+
}
|
|
2089
|
+
}
|
|
2052
2090
|
static lstDate(from, to) {
|
|
2053
2091
|
if (!from || !to) {
|
|
2054
2092
|
return [];
|