js實現時間格式化 【「XX前」的格式】

在項目中遇到這樣一個需求,將評論時間已以下圖的形式進行展現:即將評論時間顯示爲多久以前。javascript

其實實現原理也很簡單,思路以下:java

  1. 將當前時間和給定時間取毫秒數。
  2. 將當前時間的毫秒數與給定時間的毫秒數做差,獲得差值。
  3. 1秒鐘1分鐘1小時......等統一化爲毫秒爲單位。
  4. 將獲得的差值與轉化後的時間單位做商。
  5. 完成字符串拼接

實現代碼以下:

const format = (date) => {
  const ONE_SECOND = 1000;
  const ONE_MINUTE = 60000;
  const ONE_HOUR = 3600000;
  const ONE_DAY = 86400000;
  const ONE_WEEK = 604800000;
  const ONE_MONTH = 2629746000;
  const ONE_YEAR = 31556952000;
  const ONE_SECOND_AGO = "秒前";
  const ONE_MINUTE_AGO = "分鐘前";
  const ONE_HOUR_AGO = "小時前";
  const ONE_DAY_AGO = "天前";
  const ONE_MONTH_AGO = "月前";
  const ONE_YEAR_AGO = "年前";
  let delta = new Date().getTime() - date.getTime()
  if (delta < 1 * ONE_MINUTE) {
    let seconds = ~~(delta / ONE_SECOND);
    return (seconds <= 0 ? 1 : seconds) + ONE_SECOND_AGO;
  }
  if (delta < 45 * ONE_MINUTE) {
    let minutes = ~~(delta / ONE_MINUTE)
    return (minutes <= 0 ? 1 : minutes) + ONE_MINUTE_AGO;
  }
  if (delta < 24 * ONE_HOUR) {
    let hours = ~~(delta / ONE_HOUR);
    return (hours <= 0 ? 1 : hours) + ONE_HOUR_AGO;
  }
  if (delta < 48 * ONE_HOUR) {
    return "昨天";
  }
  if (delta < 30 * ONE_DAY) {
    let days = ~~(delta / ONE_DAY);
    return (days <= 0 ? 1 : days) + ONE_DAY_AGO;
  }
  if (delta < 12 * 4 * ONE_WEEK) {
    let months = ~~(delta / ONE_MONTH);
    return (months <= 0 ? 1 : months) + ONE_MONTH_AGO;
  } else {
    let years = ~~(delta / ONE_YEAR);
    return (years <= 0 ? 1 : years) + ONE_YEAR_AGO;
  }
}
複製代碼
相關文章
相關標籤/搜索