时间格式化以及各种时间的获取(持续更新)

原生时间

1、时间格式化

    function getMyDate(str) {
        let date = new Date(str)
        let oYear = date.getFullYear()      //年  
        let oMonth = date.getMonth() + 1    //月  
        let oDay = date.getDate()           //日
        let h = date.getHours()             //小时
        let m = date.getMinutes()           //分钟
        let s = date.getSeconds()           //秒数
        // 以自己需要的方式拼接时间
        function getZero(num) {
            if (parseInt(num) < 10) { num = '0' + num; }// 单数前面加0
            return num;
        }
        let oTime = oYear + '-' + getZero(oMonth) + '-' + getZero(oDay) + ' ' + getZero(h) + ':' + getZero(m) + ':' + getZero(s);
        return oTime;
    }
    let curTime = new Date()
    console.info(getMyDate(curTime));//2022-04-13 11:07:51

2、时间格式化

function timeFormat(parame, type = 'YYYY-MM-dd HH:mm:ss') {
    if (parame) {
        let params = parame.toString()
        if (type == 'YYYY-MM-dd HH:mm:ss') {
            return params.substr(0, 4) + '-' + params.substr(4, 2) + '-' + params.substr(6, 2) + ' ' + params.substr(8, 2) + ':' + params.substr(10, 2) + ':' + params.substr(12, 2)
        } else if (type == 'YYYY-MM-dd') {
            return params.substr(0, 4) + '-' + params.substr(4, 2) + '-' + params.substr(6, 2)
        } else if (type == 'YYYY-MM') {
            return params.substr(0, 4) + '-' + params.substr(4, 2)
        }
    }
}

console.log(timeFormat(20221031153046));//2022-10-31 15:30:46

3、计算时间

/**
 * @description: 相对时间
 * @param {*} time 时间
 * @return {string} 3秒前 12分钟前  2年前
 */
// 计算时间
function fromNow(time = new Date()) {
  let result = null
  let oldTime = new Date(time).getTime()
  let mistiming = Math.round(new Date()) - oldTime
  let arrr = ['年', '个月', '星期', '天', '小时', '分钟', '秒']
  let arrn = [31536000, 2592000, 604800, 86400, 3600, 60, 1]
  for (let i = 6; i >= 0; i--) {
    let inm = Math.floor(mistiming / 1000 / arrn[i])
    if (inm != 0) {
      result = inm + arrr[i] + '前'
    }
  }
  return result
}

//例:当前 2022-10-31
console.log(fromNow('2022-10-30'));//一天前

4、时间戳

    let curTime = new Date()
    function getMyTimestamp(str){
        let date = new Date(str)
        let timestamp = date.getTime()
        return timestamp
    }
    console.info(getMyTimestamp(curTime ));//1649819725400
    console.info(getMyTimestamp('2022-04-13 00:00:00'));//1649779200000

5、当天之前几天日期的获取

  • 例:今天是2022-08-04需要获取昨天或者前天的日期
function getDay(day) {
    var today = new Date();
    var targetday_milliseconds = today.getTime() + 1000 * 60 * 60 * 24 * day;
    today.setTime(targetday_milliseconds); //注意,这行是关键代码
    var tYear = today.getFullYear();
    var tMonth = today.getMonth();
    var tDate = today.getDate();
    tMonth = doHandleTime(tMonth + 1);
    tDate = doHandleTime(tDate);
    return tYear + "-" + tMonth + "-" + tDate;
}
function doHandleTime(t) {
    return t=t<10?'0'+t:t
}
//昨天
console.log(getDay(-1))//2022-08-03
//今天
console.log(getDay(0))//2022-08-04
//明天
console.log(getDay(1))//2022-08-05

使用方式 getDay(number) number为正数则为之后几天,为负数则为之前几天

6、获取某个月份有多少天

function getMonthDay(year, month) {
    let days = new Date(year, month + 1, 0).getDate()
    return days
}
console.log(getMonthDay(2022, 1)) // 28
注:月份是从0开始计算,例查看二月份需要传入1

moment.js 用于解析、校验、操作、显示日期和时间的 JavaScript 工具库

1、官网地址:http://momentjs.cn/

2、安装使用

npm install moment --save   # npm
yarn add moment             # Yarn



3、获取时间

01、获取时间 moment(时间) 支持传入

moment().format('YYYY-MM-DD HH:mm:ss');//2022-04-13 16:04:07
moment(new Date()).format('YYYY-MM-DD HH:mm:ss');//2022-04-13 11:57:47
moment(1649836956652).format('YYYY-MM-DD HH:mm:ss');//2022-04-13 16:02:36

*02、获取单个时间 *moment(时间) 支持传入

moment().year()
moment().get('year');        //当前年份
moment().year(2021);         //设置年份为2021 
// 其他同理

moment().month()
moment().get('month')+1;     //当天月份
moment().month(5);           //(0-11)设置为5 其实是六月份

moment().date()
moment().get('date');        //当日

moment().hour()
moment().get('hour');        // 当前小时

moment().minute()
moment().get('minute');      //当前分钟

moment().second()
moment().get('second');      //当前秒 

moment().millisecond()
moment().get('millisecond'); //当前毫秒

// 获取当前的年月日时分秒的数组
moment().toArray() // [years, months, date, hours, minutes, seconds, milliseconds]
// 获取当前的年月日时分秒的对象
moment().toObject();//{years: xxxx, months: x, date: xx ...}

03、获取时间前,时间后 moment(时间) 支持传入
moment().add(number,type)时间后

//三年后
moment().add(3,'years').format('YYYY-MM-DD');//2025-04-13
moment().add(3, 'years').format('YYYY-MM-DD HH:mm:ss');//2025-04-13 16:38:39
moment('2020-04-13').add(3, 'years').format('YYYY-MM-DD');//2023-04-13 

//三月后
moment().add(3,'months').format('YYYY-MM-DD');//  其他同上

//三周后
moment().add(3,'weeks').format('YYYY-MM-DD');//  其他同上

//三天后
moment().add(3,'days').format('YYYY-MM-DD');// 其他同上

//三小时后
moment().add(3,'hours').format('YYYY-MM-DD HH:mm:ss');// 其他同上

//三分钟后
moment().add(3,'minutes').format('YYYY-MM-DD HH:mm:ss');// 其他同上

//三秒后
moment().add(3,'seconds').format('YYYY-MM-DD HH:mm:ss');// 其他同上

moment().subtract(number,type)时间前

//三年前
moment().subtract(3,'years').format('YYYY-MM-DD');//2019-04-13
moment().subtract(3, 'years').format('YYYY-MM-DD HH:mm:ss');//2019-04-13 16:52:29
moment('2020-04-13').subtract(3, 'years').format('YYYY-MM-DD');//2017-04-13 

//三月前
moment().subtract(3,'months').format('YYYY-MM-DD');//  其他同上

//三周前
moment().subtract(3,'weeks').format('YYYY-MM-DD');//  其他同上

//三天前
moment().subtract(3,'days').format('YYYY-MM-DD');// 其他同上

//三小时前
moment().subtract(3,'hours').format('YYYY-MM-DD HH:mm:ss');// 其他同上

//三分钟前
moment().subtract(3,'minutes').format('YYYY-MM-DD HH:mm:ss');// 其他同上

//三秒前
moment().subtract(3,'seconds').format('YYYY-MM-DD HH:mm:ss');// 其他同上

04、获取开始和结束时间 moment(时间) 支持传入

  • 获取当天的开始时间和结束时间
moment().startOf('day');//开始时间
moment().endOf('day');//结束时间
  • 获取本周的开始时间和结束时间
moment().startOf('week');//开始时间
moment().endOf('week');//结束时间
  • 获取本月的开始时间和结束时间
moment().startOf('month');//开始时间
moment().endOf('month');//结束时间
  • 获取本年的开始时间和结束时间
moment().startOf('year');//开始时间
moment().endOf('year');//结束时间

05、获取月份天数

moment().daysInMonth();//30
moment("2012-04", "YYYY-MM").daysInMonth();//29
moment("2022-04", "YYYY-MM").daysInMonth();//30

04、时间戳

  1. 精确到毫秒
moment().valueOf()
  1. 精确到秒
moment().unix()

05、格式化

  • moment(时间)——可传入时间
    格式代码    说明                          返回值例子
    M           数字表示的月份,没有前导零        1到12
    MM          数字表示的月份,有前导零         01到12
    MMM         三个字母缩写表示的月份          Jan到Dec
    MMMM        月份,完整的文本格式           January到December
    Q           季度                         1到4
    D           月份中的第几天,没有前导零       1到31
    DD          月份中的第几天,有前导零         01到31
    d           星期中的第几天,数字表示         0到6,0表示周日,6表示周六
    ddd         三个字母表示星期中的第几天        Sun到Sat
    dddd        星期几,完整的星期文本          从Sunday到Saturday
    w           年份中的第几周                 如42:表示第42周
    YYYY        四位数字完整表示的年份          如:2014 或 2000
    YY          两位数字表示的年份                如:14 或 98
    A           大写的AM PM    AM PM
    a           小写的am pm    am pm
    HH          小时,24小时制,有前导零        00到23
    H           小时,24小时制,无前导零        0到23
    hh          小时,12小时制,有前导零        00到12
    h           小时,12小时制,无前导零        0到12
    m           没有前导零的分钟数               0到59
    mm          有前导零的分钟数                00到59
    s           没有前导零的秒数                1到59
    ss          有前导零的描述                 01到59
    X           Unix时间戳                    1411572969

moment().format('YYYY-MM-DD HH:mm:ss');//可自由拼凑

06、计算时间差

  • 基础计算时间差
    let startTime = '2021-04-10 15:20:20'
    let endTime = '2022-04-14 15:20:20'
    // 相差几年
    let year = moment(endTime).diff(moment(startTime), 'years')
    // 相差几月
    let months =moment(endTime).diff(moment(startTime), 'months')
    // 相差几天
    let days =moment(endTime).diff(moment(startTime), 'days')
    // 相差小时
    let hours =moment(endTime).diff(moment(startTime), 'hours')
    // 相差几分钟
    let minutes =moment(endTime).diff(moment(startTime), 'minutes')
    // 相差几秒
    let seconds =moment(endTime).diff(moment(startTime), 'seconds')

你可能感兴趣的:(时间格式化以及各种时间的获取(持续更新))