@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 [];