Quellcode durchsuchen

feat: [@jy/uitl] 新增最近日期计算函数

zhangyuhan vor 1 Jahr
Ursprung
Commit
eb1cfd2678
1 geänderte Dateien mit 58 neuen und 0 gelöschten Zeilen
  1. 58 0
      packages/util/modules/format/date.js

+ 58 - 0
packages/util/modules/format/date.js

@@ -59,3 +59,61 @@ export function dateFormatter(date = '', fmt = 'yyyy-MM-dd HH:mm:ss') {
   }
   return fmt
 }
+
+// 时间戳转换 多少秒、多少分、多少小时前、多少天前  超出10天显示年月日
+// 传入一个时间戳
+export function dateFromNow(originTime, useOld = false) {
+  if (!originTime) return
+  // 原始时间 - 传入的时间戳
+  const originTimeStamp = +new Date(originTime)
+  // 当前时间戳
+  const nowTimeStamp = +new Date()
+  // 时间戳相差多少
+  const diffTimeStamp = nowTimeStamp - originTimeStamp
+
+  const postfix = diffTimeStamp > 0 ? '前' : '后'
+  // 求绝对值 ms(毫秒)
+  const diffTimeStampAbsMs = Math.abs(diffTimeStamp)
+  const diffTimeStampAbsS = Math.round(diffTimeStampAbsMs / 1000)
+
+  // 10天的秒数
+  const days11 = 11 * 24 * 60 * 60
+
+  const dataMap = {
+    zh: ['天', '小时', '分钟', '秒'],
+    number: [24 * 60 * 60, 60 * 60, 60, 1]
+  }
+
+  let timeString = ''
+  // 10天前
+  const tenDaysAgo = diffTimeStampAbsS > days11
+  // 是否是当天
+  const isCurrentDay =
+    dateFormatter(originTimeStamp, 'yyyy.MM.dd') ===
+    dateFormatter(nowTimeStamp, 'yyyy.MM.dd')
+
+  let condition = !isCurrentDay
+  if (useOld) {
+    condition = tenDaysAgo
+  }
+
+  if (condition) {
+    // 不是当天,则使用正常日期显示
+    const originDate = new Date(originTimeStamp)
+    const nowDate = new Date()
+    // 是否同年
+    const sameYear = originDate.getFullYear() === nowDate.getFullYear()
+    // 如果是当年,则不显示年
+    const patternString = sameYear ? 'MM-dd' : 'yyyy-MM-dd'
+    timeString = dateFormatter(originDate, patternString)
+  } else {
+    for (let i = 0; i < dataMap.number.length; i++) {
+      const inm = Math.floor(diffTimeStampAbsS / dataMap.number[i])
+      if (inm !== 0) {
+        timeString = inm + dataMap.zh[i] + postfix
+        break
+      }
+    }
+  }
+  return timeString
+}