formatDate.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. // 格式化时间
  2. // this.timestampFormat('2022-07-05 15:10:10');
  3. // timestamp:时间戳
  4. // time:2022-07-05 15:10:10'
  5. export const formatDate = (date, type = "time") => {
  6. let timestamp = null
  7. if (type === "time") {
  8. timestamp = Date.parse(date.replace(/-/g, '/')) / 1000 //可解析一个日期时间字符串,并返回 1970/1/1 午夜距离该日期时间的毫秒数。
  9. } else {
  10. timestamp = date / 1000
  11. }
  12. function zeroize(num) {
  13. return (String(num).length == 1 ? '0' : '') + num;
  14. }
  15. let curTimestamp = parseInt(new Date().getTime() / 1000); //当前时间戳
  16. let timestampDiff = curTimestamp - timestamp; // 参数时间戳与当前时间戳相差秒数
  17. let curDate = new Date(curTimestamp * 1000); // 当前时间日期对象
  18. let tmDate = new Date(timestamp * 1000); // 参数时间戳转换成的日期对象
  19. let Y = tmDate.getFullYear(),
  20. m = tmDate.getMonth() + 1,
  21. d = tmDate.getDate();
  22. let H = tmDate.getHours(),
  23. i = tmDate.getMinutes(),
  24. s = tmDate.getSeconds();
  25. if (timestampDiff < 60) { // 一分钟以内
  26. return "刚刚";
  27. } else if (timestampDiff < 3600) { // 一小时前之内
  28. return Math.floor(timestampDiff / 60) + "分钟前";
  29. } else if (curDate.getFullYear() == Y && curDate.getMonth() + 1 == m && curDate.getDate() == d) {
  30. if (H <= 12) {
  31. return '上午' + zeroize(H) + ':' + zeroize(i);
  32. }
  33. return '下午' + zeroize(H) + ':' + zeroize(i);
  34. } else {
  35. let newDate = new Date((curTimestamp - 86400) * 1000); // 参数中的时间戳加一天转换成的日期对象
  36. if (newDate.getFullYear() == Y && newDate.getMonth() + 1 == m && newDate.getDate() == d) {
  37. if (H <= 12) {
  38. return '昨天' + ' ' + '上午' + zeroize(H) + ':' + zeroize(i);
  39. }
  40. return '昨天' + ' ' + '下午' + zeroize(H) + ':' + zeroize(i);
  41. } else if (curDate.getFullYear() == Y) {
  42. return zeroize(m) + '月' + zeroize(d) + '日 ' + zeroize(H) + ':' + zeroize(i);
  43. } else {
  44. return Y + '年' + zeroize(m) + '月' + zeroize(d) + '日 ' + zeroize(H) + ':' + zeroize(i);
  45. }
  46. }
  47. }