常用工具函数 (时间篇)

103 阅读4分钟

方法一

 Format(time, fmt) {
          var o = {
            "M+": time.getMonth() + 1, //月份
            "d+": time.getDate(), //日
            "h+": time.getHours() % 12 == 0 ? 12 : time.getHours() % 12, //小时
            "H+": time.getHours(), //小时
            "m+": time.getMinutes(), //分
            "s+": time.getSeconds(), //秒
            S: time.getMilliseconds() //毫秒
          };
          //周
          var week = {
            "0": "日",
            "1": "一",
            "2": "二",
            "3": "三",
            "4": "四",
            "5": "五",
            "6": "六"
          };

          if (/(y+)/.test(fmt)) {
            fmt = fmt.replace(
              RegExp.$1,
              (time.getFullYear() + "").substr(4 - RegExp.$1.length)
            );
          }
          if (/(E+)/.test(fmt)) {
            fmt = fmt.replace(
              RegExp.$1,
              (RegExp.$1.length > 1
                ? RegExp.$1.length > 2
                  ? "星期"
                  : "周"
                : "") + week[time.getDay() + ""]
            );
          }
          for (var j in o) {
            if (new RegExp("(" + j + ")").test(fmt)) {
              fmt = fmt.replace(
                RegExp.$1,
                RegExp.$1.length == 1
                  ? o[j]
                  : ("00" + o[j]).substr(("" + o[j]).length)
              );
            }
          }
          return fmt;
        },

Format(nowData,'yyyy-MM-dd') 2021-12-6
Format(nowData,'EEE hh:MM:ss') 星期一 15;14:32

方法二

import moment from 'moment'
mounted() {
        this.getNow()
    },
 methods: {
 moment
 getNow() {
            const mo = moment()
            const year = mo.format('yyyy-MM-DD')
            const weekNum = mo.format('E')
            const time = mo.format('HH:mm:ss')
            const cnWeek = ['日', '一', '二', '三', '四', '五', '六']

            this.currentDate = `${year}  星期${cnWeek[weekNum]}  ${time}`
            setTimeout(() => {
                this.getNow()
            }, 1000)
        },
 }

 

currentDat:'', 2021-12-6 星期一 15;14:32

方法三

当前时间
function getCurrentTime() {
    var time = new Date()
    var y = time.getFullYear()
    var m = time.getMonth() + 1
    var d = time.getDate()
    var h = time.getHours()
    var s = time.getMinutes()
    var ss = time.getSeconds()
    if (m.toString().length < 2) {
        m = '0' + m
    }
    if (d.toString().length < 2) {
        d = '0' + d
    }
    if (h.toString().length < 2) {
        h = '0' + h
    }
    if (s.toString().length < 2) {
        s = '0' + s
    }
    if (ss.toString().length < 2) {
        ss = '0' + ss
    }
    return y + '-' + m + '-' + d + ' ' + h + ':' + s + ':' + ss
}

方法四 将时间戳处理为字符串


export function handleDateToString (time, showHMS) {
    if (!time) {
        return '--'
    } else {
        let date
        if (time instanceof Date) {
            date = time
        } else {
            date = new Date(time)
        }
        let year = date.getFullYear()
        let month = date.getMonth() + 1
        let day = date.getDate()
        let hour = date.getHours()
        let minute = date.getMinutes()
        let second = date.getSeconds()
        month = month < 10 ? ('0' + month) : month
        day = day < 10 ? ('0' + day) : day
        hour = hour === 0 ? '00' : (hour < 10 ? '0' + hour : hour)
        minute = minute === 0 ? '00' : (minute < 10 ? '0' + minute : minute)
        second = second === 0 ? '00' : (second < 10 ? '0' + second : second)
        return year + '-' + month + '-' + day + (showHMS ? ' ' + hour + ':' + minute + ':' + second : '')
    }
}

moment.js 方便 快捷 功能全

vue项目中,需要把 moment.js 挂载到全局上(即vue的原型链上),访问时直接使用 this.moment() ;

vue项目中不挂载到全局,单文件(单组件)使用:

  import moment from "moment";      //然后直接使用 moment() 
      

1. 初始化日期 / 时间

初始化日期:

moment().format('YYYY-MM-DD');

初始化日期时间:

moment().format('YYYY-MM-DD HH:mm:ss');

2. 格式化日期 / 时间

格式化日期:

moment(value).format('YYYY-MM-DD');

格式化日期时间:

moment(value).format('YYYY-MM-DD HH:mm:ss');

3. 加/减时间

操作之前必须使用 this.moment(日期变量) ;将要操作的日期转为 moment.js 可以处理的日期时间格式

加法: ==>> 当前日期加一个月并输出格式为 'YYYY-MM-DD'

this.moment().add(1, 'months').format('YYYY-MM-DD'); 

加法: ==>> 指定日期(startDate)加2天并输出格式为 'YYYY-MM-DD'

this.moment(startDate).add(2, 'days').format('YYYY-MM-DD')  

减法: ==>> 当前时间减去7天

this.moment().subtract(7, 'days');    

加法: ==>> 指定日期(startDate)加减去2天并输出格式为 'YYYY-MM-DD'

this.moment(startDate).subtract(2, 'days').format('YYYY-MM-DD')     

4. 获取某年某月的第一天或最后一天

获取某年某月的第一天:

 startOf('month')
 startOf('year')
  moment(日期).startOf('month').format("YYYY-MM-DD")//日期可以是 年月的格式 也可以是年月日的格式

  moment(日期).startOf('year').format("YYYY-MM-DD")

获取某年某月的最后一天:

 endOf('month')
 endOf('year')

   moment(日期).endOf('month').format("YYYY-MM-DD")//日期可以是 年月的格式 也可以是年月日的格式

   moment(日期).endOf('year').format("YYYY-MM-DD")

一天的00:00:00 23:59:59


   moment(日期).startOf('day').format("YYYY-MM-DD HH:mm:ss")
   moment(日期).endOf('day').format("YYYY-MM-DD HH:mm:ss")

5. 获取星期几

获取星期几: ==>> 当前日期/指定日期是星期几

this.moment().day()  或  this.moment(startDate).day()   

6. 获取毫秒数

获取毫秒数: ==>> 在获取指定时间的毫秒数时,必须要有日期。即startDate包括日期时间

this.moment().day()  或  this.moment(startDate).valueOf() 

7. 获取时间差(以毫秒计算)

两个日期/时间的时差: ==>> 开始时间和结束时间的时间差,以“天”为单位;endTime和startTime都是毫秒数

this.moment(endTime).diff(this.moment(startTime),'days' )

开始时间和结束时间的时间差,以“分钟”为单位
注意:计算时间差时,可以以 “years”、“days”、“hours”、“minutes” 以及 "seconds" 为单位输出!

this.moment(endTime).diff(this.moment(startTime), 'minutes')

8. 获取时、分、秒

原理:利用字符串的 split 方法拆分时分秒,然后分别用moment的 hour、minute 和 second 方法;带有日期的可以用 .valueof() 方法。


const fixStart = '08:00:00'
 
const getHour = this.moment().hour(Number(fixStart.split(':')[0]));
const getMinute = this.moment().minute(Number(fixStart.split(':')[1]));
const getSecond = this.moment().second(Number(fixStart.split(':')[2]));
            
// 描述为0,直接写出second(0)
const getHour_Minute_Second = this.moment().hour(Number(fixStart.split(':')[0])).minute(Number(fixStart.split(':')[1])).second(0);       
 
console.log(getHour,getMinute,getSecond,getHour_Minute_Second);

9. 将毫秒数转为时分秒

注意:毫秒转为其他单位时,达到你想要转的单位时,为1,超过时不管,不足时为0;


const msTime = 4800000;        //80分钟
 
moment.duration(msTime).hours();       //转为小时,值为1
moment.duration(msTime).minutes();     //转为分钟,值为20
moment.duration(msTime).seconds();     //转为秒,值为0
moment.duration(msTime, 'seconds');        //转为秒
moment.duration(msTime, 'minutes');        //转为分
moment.duration(msTime, 'hours');          //转为小时
moment.duration(msTime, 'days');           //转为天
moment.duration(msTime, 'weeks');          //转为周
moment.duration(msTime, 'months');         //转为月
moment.duration(msTime, 'years');          //转为年

10. 判断一个日期是否在两个日期之前 isBetween

语法:

 this.moment().isBetween(moment-like, moment-like, String, String);
  1. 不包含起始这两个日期(只有两个参数) ==>> 中文网只有两个参数
this.moment('2010-10-20').isBetween('2010-10-19', '2010-10-25'); // true
this.moment('2010-10-19').isBetween('2010-10-19', '2010-10-25'); // false
this.moment('2010-10-25').isBetween('2010-10-19', '2010-10-25'); // false
  1. 自定义是否包含起始日期(四个参数,主要是第四个参数)   ==>> 英文网才有四个参数 第三个参数,固定为null; 第四个参数,字符串,( ) 表示不包含,[ ] 表示包含。右括号制开始日期,右括号控制结束日期

this.moment('2016-10-30').isBetween('2016-10-30', '2016-12-30', null, '()'); //false
this.moment('2016-10-30').isBetween('2016-10-30', '2016-12-30', null, '[)'); //true
this.moment('2016-10-30').isBetween('2016-01-01', '2016-10-30', null, '()'); //false
this.moment('2016-10-30').isBetween('2016-01-01', '2016-10-30', null, '(]'); //true
this.moment('2016-10-30').isBetween('2016-10-30', '2016-10-30', null, '[]'); //true