1. 日期格式化

  1. /*
  2. * 日期格式化
  3. * 使用方式:
  4. * let date = new Date()
  5. * dateFormat("YYYY-mm-dd HH:MM:SS", date)
  6. * 2019-06-06 19:45:11
  7. * let date1 = new Date()
  8. * dateFormat("YYYY/mm/dd", date1)
  9. * 2019/11/08
  10. */
  11. export const dateFormat = (fmt, date) => {
  12. let ret;
  13. let opt = {
  14. "Y+": date.getFullYear().toString(), // 年
  15. "m+": (date.getMonth() + 1).toString(), // 月
  16. "d+": date.getDate().toString(), // 日
  17. "H+": date.getHours().toString(), // 时
  18. "M+": date.getMinutes().toString(), // 分
  19. "S+": date.getSeconds().toString() // 秒
  20. // 有其他格式化字符需求可以继续添加,必须转化成字符串
  21. };
  22. for (let k in opt) {
  23. ret = new RegExp("(" + k + ")").exec(fmt);
  24. if (ret) {
  25. fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
  26. };
  27. };
  28. return fmt;
  29. }

2. 时间戳转化为日期格式

/*
 * 时间戳转化为日期格式
 * 参数一:时间戳
 * 参数二:分隔符 如'/','-'
 * timeStampTurnTime(new Date().getTime()/1000)
 * 2019-11-08 16:52:42
 * timeStampTurnTime(new Date().getTime()/1000,'/')
 * 2019/11/08 16:52:42
 */
export const timeStampTurnTime = (timeStamp,fmt='-') => {
    if(timeStamp > 0){
        var date = new Date();  
        date.setTime(timeStamp * 1000);  
        var y = date.getFullYear();      
        var m = date.getMonth() + 1;      
        m = m < 10 ? ('0' + m) : m;      
        var d = date.getDate();      
        d = d < 10 ? ('0' + d) : d;      
        var h = date.getHours();    
        h = h < 10 ? ('0' + h) : h;    
        var minute = date.getMinutes();    
        var second = date.getSeconds();    
        minute = minute < 10 ? ('0' + minute) : minute;      
        second = second < 10 ? ('0' + second) : second;     
        return y + fmt + m + fmt + d+' '+h+':'+minute+':'+second;       
    }
}

3. 时间戳显示为多少分钟、小时、天前

/**
 * 时间戳显示为多少分钟前,多少天前的JS处理
 * @param { number } timestamp 
 */

export function dateDiff(timestamp) {
    // 补全为13位
    var arrTimestamp = (timestamp + '').split('');
    for (var start = 0; start < 13; start++) {
        if (!arrTimestamp[start]) {
            arrTimestamp[start] = '0';
        }
    }
    timestamp = arrTimestamp.join('') * 1;
    var minute = 1000 * 60;
    var hour = minute * 60;
    var day = hour * 24;
    // var halfamonth = day * 15;
    var month = day * 30;
    var now = new Date().getTime();
    var diffValue = now - timestamp;
    // 如果本地时间反而小于变量时间
    if (diffValue < 0) {
        return '不久前';
    }
    // 计算差异时间的量级
    var monthC = diffValue / month;
    var weekC = diffValue / (7 * day);
    var dayC = diffValue / day;
    var hourC = diffValue / hour;
    var minC = diffValue / minute;
    // 数值补0方法
    var zero = function (value) {
        if (value < 10) {
            return '0' + value;
        }
        return value;
    };
    // 使用
    if (monthC > 12) {
        // 超过1年,直接显示年月日
        return (function () {
            var date = new Date(timestamp);
            return date.getFullYear() + '年' + zero(date.getMonth() + 1) + '月' + zero(date.getDate()) + '日';
        })();
    } else if (monthC >= 1) {
        return parseInt(monthC) + "月前";
    } else if (weekC >= 1) {
        return parseInt(weekC) + "周前";
    } else if (dayC >= 1) {
        return parseInt(dayC) + "天前";
    } else if (hourC >= 1) {
        return parseInt(hourC) + "小时前";
    } else if (minC >= 1) {
        return parseInt(minC) + "分钟前";
    }
    return '刚刚';
};

// 使用方式
dateDiff(Date.now())
"刚刚"
dateDiff(1621384034000)
"2小时前"
dateDiff(1621390814000)
"7分钟前"
dateDiff(1621304714000)
"1天前"
dateDiff(1616034314000)
"2月前"
dateDiff(1584498314000)
"2020年03月18日"

4. 格式化时间 下午 08:12 | 昨日 09:12 | 2019-12-03 20:12

/**
* 格式化时间 下午 08:12 | 昨日 09:12 | 2019-12-03 20:12
* @param {Date} time 输入Unix时间戳
* @return {Object} 格式化结果
*/
export function fnFormatTimeHeader(time) {
    // 格式化传入时间
    let date = new Date(parseInt(time)),
        year = date.getUTCFullYear(),
        month = date.getUTCMonth(),
        day = date.getDate(),
        hour = date.getHours(),
        minute = date.getUTCMinutes()
    // 获取当前时间
    let currentDate = new Date(),
        currentYear = date.getUTCFullYear(),
        currentMonth = date.getUTCMonth(),
        currentDay = currentDate.getDate()
    // 计算是否是同一天
    if (currentYear == year && currentMonth == month && currentDay == day) { //同一天直接返回
        if (hour > 12) {
            return `下午 ${hour}:${minute < 10 ? '0' + minute : minute}`
        } else {
            if (hour >= 10) {
                return `上午 ${hour}:${minute < 10 ? '0' + minute : minute}`
            } else {
                return `上午 0${hour}:${minute < 10 ? '0' + minute : minute}`
            }

        }
    }
    // 计算是否是昨天
    let yesterday = new Date(currentDate - 24 * 3600 * 1000)
    // console.log('123', day , yesterday.getDate())
    // console.log(month , yesterday.getUTCMonth())
    if (year == yesterday.getUTCFullYear() && month == yesterday.getUTCMonth() && day == yesterday.getDate()) { //昨天
        return `昨天 ${hour >= 10 ? hour : '0' + hour}:${minute < 10 ? '0' + minute : minute}`
    } else {
        return `${year}-${month + 1}-${day} ${hour}:${minute < 10 ? '0' + minute : minute}`
    }
}
// 使用方式
fnFormatTimeHeader(1621384034000)
"上午 08:27"
fnFormatTimeHeader(1621304714000)
"昨天 10:25"
fnFormatTimeHeader(1584498314000)
"2020-3-18 10:25"

5. 更加详细的日期转化(年月日|时分秒|星期|季度)

/**
 * 日期时间格式化
 * {{ Date() | formatDate }} -> 2020-09-28 15:54:52
 * {{ '2020/10/01 12:30:45' | formatDate('yyyy-MM-dd hh:mm:ss w') }} -> 2020-10-01 12:30:45 星期四
 * @param {Date} value 可以被 new Date(value) 解析的时间格式,如 Date()、2020/10/01、2020-10-01 12:00 等
 * @param {String} fmt 格式化模版
 */
export const formatDate = (value, fmt = 'yyyy-MM-dd hh:mm:ss') => {
  const date = new Date(value)
  const o = {
    'M+': date.getMonth() + 1, // 月份
    'd+': date.getDate(), // 日
    'h+': date.getHours(), // 小时
    'm+': date.getMinutes(), // 分
    's+': date.getSeconds(), // 秒
    'w+': date.getDay(), // 星期
    'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
    S: date.getMilliseconds(), // 毫秒
  }

  if (/(y+)/.test(fmt)) {
    fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
  }

  for (var k in o) {
    if (k === 'w+') {
      if (o[k] === 0) {
        fmt = fmt.replace('w', '星期日')
      } else if (o[k] === 1) {
        fmt = fmt.replace('w', '星期一')
      } else if (o[k] === 2) {
        fmt = fmt.replace('w', '星期二')
      } else if (o[k] === 3) {
        fmt = fmt.replace('w', '星期三')
      } else if (o[k] === 4) {
        fmt = fmt.replace('w', '星期四')
      } else if (o[k] === 5) {
        fmt = fmt.replace('w', '星期五')
      } else if (o[k] === 6) {
        fmt = fmt.replace('w', '星期六')
      }
    } else if (new RegExp(`(${k})`).test(fmt)) {
      fmt = fmt.replace(
        RegExp.$1,
        RegExp.$1.length === 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length),
      )
    }
  }

  return fmt
}