moment / dayjs 计算时间差( 距过去或未来某个时间点的差值) ( 年,月,日,时,钟,秒)

TypeScript 代码

如果是用的 moment , 把 dayjs () 替换成 moment() 就可以了.
两个库是兼容的

// 引入
import dayjs, { Dayjs } from "dayjs";

// 传入 过去/未来 的一个时间
// 字符串格式: 只要能被 moment 处理的时间格式都可以
let diffTime = (time: Dayjs | string) => {
  let myTime: Dayjs = typeof time == "string" ? dayjs(time) : time;
  let nowTime = dayjs();
  let diff = dayjs.duration(myTime.diff(nowTime));
  let isBefore = myTime.isBefore(nowTime);
    
  let year = diff.years();
  let month = diff.months();
  let day = diff.days();
  let hour = diff.hours();
  let minute = diff.minutes();
  let second = diff.seconds(); 
  
  let ret: string[] = [];
  // 将负数变为正数
  function abs(num: number) {
    if (num < 0) {
      return Math.abs(num);
    }
    return num;
  }
  // 到期后,在时间前面添加 "-" 号
  ret.push(isBefore ? "-" : "");
  
  if (year != 0) {
    ret.push(`${abs(year)}`);
  }
  if (month != 0) {
    ret.push(`${abs(month)}`);
  }   
  if (day != 0) {
    ret.push(`${abs(day)}`);
  }
  if (hour != 0) {
    ret.push(`${abs(hour)}`);
  }
  if (minute != 0) {
    ret.push(`${abs(minute)}`);
  }
  if (second != 0) {
    ret.push(`${abs(second)}`);
  }
  // 结果:
  //  273年 11月 23天 23时 59分 48秒
  //  1月 29天 23时 58分 28秒
  //  21时 26分 19秒
  //  - 1分 2秒
  return ret.join(" ");
};

dayjs 初始化

import dayjs from 'dayjs';
import 'dayjs/locale/zh-cn';

import calenderPlugin from 'dayjs/plugin/calendar';
import relativeTimePlugin from 'dayjs/plugin/relativeTime';
import timezone from 'dayjs/plugin/timezone';
import updateLocale from 'dayjs/plugin/updateLocale';
import utc from 'dayjs/plugin/utc';
import duration from 'dayjs/plugin/duration';

dayjs.extend(duration)
dayjs.extend(updateLocale);
dayjs.extend(relativeTimePlugin);
dayjs.extend(calenderPlugin);
dayjs.extend(utc);
dayjs.extend(timezone);

dayjs.updateLocale('zh-cn', {
  // A : 上午/下午/晚上 , dddd: 星期
  calendar: {
    lastDay: 'YYYY.MM.DD [昨天] A h:mm dddd',
    sameDay: 'YYYY.MM.DD [今天] A h:mm dddd',
    nextDay: 'YYYY.MM.DD [明天] A h:mm dddd',
    lastWeek: 'YYYY.MM.DD A h:mm [上]dddd',
    nextWeek: 'YYYY.MM.DD A h:mm [下]dddd',
    sameElse: 'YYYY.MM.DD A h:mm dddd',
  },
});
// 设置语言
dayjs.locale('zh-cn');
//设置时区 ( 如果不设置, 那 nodejs (比如: webpack插件/vite插件) 在 vercel 等构建平台, 就会用的国外服务器时间)
dayjs.tz.setDefault('Asia/Shanghai');

console.log('dayjs: 初始化完成');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值