前端实用插件-日期处理工具Day.js

前言

前端程序猿们在开发中肯定会遇到需要对Date做各种处理的场景,给大家介绍个我当前用的“真香”插件 Day.js,主打一个体积小(2KB)、功能全、易上手

使用方式

这里只说下nodeJS环境和浏览器环境下的引入方式

  1. 方法1:nodeJs环境。请根据平日安装node_modules依赖的方式选择性下载
命令1:npm install dayjs -S
或
命令2:cnpm install dayjs -S
或
命令3:yarn add dayjs -S
  1. 方法2:浏览器环境。以下几个地址都可以直接引用,也可以下载到本地后引入到项目内,方式任君挑选
<script src="https://unpkg.com/dayjs@1.8.21/dayjs.min.js"></script><script src="https://cdn.bootcdn.net/ajax/libs/dayjs/1.11.9/dayjs.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/dayjs/1.11.10/dayjs.min.js"></script><script src="https://cdn.jsdelivr.net/npm/dayjs@1.11.10/dayjs.min.js"></script>

主要功能介绍

1. 获取当前日期及设置格式

 var nowD= dayjs().format('YYYY-MM-DD');  //等价于dayjs(new Date()).format('YYYY-MM-DD')
 console.log(nowD);//结果:2023-09-03
 
 var nowD= dayjs().format('YYYY/MM/DD');  
 console.log(nowD);//结果:2023/09/03
 
 var nowD= dayjs().format('YYYY年MM月DD日');  
 console.log(nowD);//结果:2023年09月03日

var nowD= dayjs().format('YY/M/D');  
 console.log(nowD);//结果:23/9/3

说明:
1. YYYY-返回4位年份、YY-年份后两位数、
2. MM-返回01-12月份数字(小于100)、M-返回1-12中月份数字(小于10不补03. DD-返回01-31内日期(小于100)、M-返回1-31中日期(小于10不补0

2. 获取当前时间及设置格式

//测试时间:2023/09/03 16:04:19
var nowT= dayjs().format('YYYY-MM-DD HH:mm:ss');  
console.log(nowT);//结果:2023-09-03 16:04:19

var nowT= dayjs().format('YYYY年M月D日 H:m:ss');  
console.log(nowT);//结果:2023年9月3日 16:4:19

var nowT= dayjs().format('YYYY-MM-DD hh:mm:ss');  
console.log(nowT);//结果:2023-09-03 04:04:19

var nowT= dayjs().format('YYYY-M-D h:m:ss');  
console.log(nowT);//结果:2023-9-3 4:4:19

var nowT= dayjs().format('YYYY/MM/DD H:m:ss');  
console.log(nowT);//结果:2023/10/30 16:4:19

var nowT= dayjs().format('YYYY-MM-DD HH:mm:ss.SSS');  
console.log(nowT);//结果:2023-10-30 16:4:19.399

说明:
1. HH-24小时制-返回01-24内小时数值(小于100)、H--24小时制-返回1-24内小时数值(小于10不补02. hh-12小时制-返回01-12内小时数值(小于100)、h-12小时制-返回1-12内小时数值(小于10不补0),比如下午16点,hh返回04,h返回4
3. mm-返回00-59内分钟数值(小于100)、m-返回0-59内分钟数值(小于10不补04. ss-返回00-59内秒数值(小于100)、s-返回0-59内分钟数值(小于10不补05. SSS-返回三位毫秒数

3. 特定时间格式化

//对下面时间进行格式转换
var sd = "2023/9/9 16:30:00";
var nowS= dayjs(sd).format('YYYY-MM-DD HH:mm:ss');  
console.log(nowS);//结果:2023-09-09 16:30:00

var nowS= dayjs(sd).format('YYYY/MM/DD HH:mm:ss');  
console.log(nowS);//结果:2023/09/09 16:30:00

var nowS= dayjs(sd).format('YYYY年MM月DD日 HH:mm:ss');  
console.log(nowS);//结果:2023年09月09日 16:30:00

4. 日期 加add、减subtract、差值diff 运算

//测试时间:2023/09/03 16:04:19

//加6天
var newDate = dayjs('2023/09/03 16:04:19').add(6, 'day').format('YYYY-MM-DD HH:mm:ss');
console.log(newDate); //2023-09-09 16:04:19 

//加1周
var newDate = dayjs('2023/09/03 16:04:19').add(1, 'week').format('YYYY-MM-DD HH:mm:ss');
console.log(newDate); //2023-09-10 16:04:19 

//加2月
var newDate = dayjs('2023/09/03 16:04:19').add(2, 'M').format('YYYY-MM-DD HH:mm:ss');
console.log(newDate); //2023-11-03 16:04:19 

//加1年
var newDate = dayjs('2023/09/03 16:04:19').add(1, 'year').format('YYYY-MM-DD HH:mm:ss');
console.log(newDate); //2024-09-03 16:04:19 

//加1小时
var newDate = dayjs('2023/09/03 16:04:19').add(1, 'hour').format('YYYY-MM-DD HH:mm:ss');
console.log(newDate); //2023-09-03 17:04:19 

//加30分钟
var newDate = dayjs('2023/09/03 16:04:19').add(30, 'minute').format('YYYY-MM-DD HH:mm:ss');
console.log(newDate); //2023-09-33 16:04:19 

//减6天
var newDate = dayjs('2023/09/03 16:04:19').subtract(6, 'day').format('YYYY-MM-DD HH:mm:ss');
console.log(newDate); //2023-08-28 16:04:19 

//减1周
var newDate = dayjs('2023/09/03 16:04:19').subtract(1, 'week').format('YYYY-MM-DD HH:mm:ss');
console.log(newDate); //2023-08-27 16:04:19 

//减2月
var newDate = dayjs('2023/09/03 16:04:19').subtract(2, 'M').format('YYYY-MM-DD HH:mm:ss');
console.log(newDate); //2023-07-03 16:04:19 

//减1年
var newDate = dayjs('2023/09/03 16:04:19').subtract(1, 'year').format('YYYY-MM-DD HH:mm:ss');
console.log(newDate); //2022-09-03 16:04:19 

//减1小时
var newDate = dayjs('2023/09/03 16:04:19').subtract(1, 'hour').format('YYYY-MM-DD HH:mm:ss');
console.log(newDate); //2023-09-03 15:04:19 

//减30分钟
var newDate = dayjs('2023/09/03 16:04:19').subtract(30, 'minute').format('YYYY-MM-DD HH:mm:ss');
console.log(newDate); //2023-09-33 15:34:19 

//链式加、减结合使用:先加1天再减30分钟
var newDate = dayjs('2023/09/03 16:04:19').add(1, 'day').subtract(30, 'minute').format('YYYY-MM-DD HH:mm:ss');
console.log(newDate); //2023-09-04 15:34:19 

//diff计算两个日期的差值
var date1 = dayjs('2023/09/03 16:04:19');
var date2 = dayjs('2022/08/02 16:04:19');
date1.diff(date2 , 'day') // 397
date1.diff(date2 , 'month') // 13
date1.diff(date2 , 'year') // 1

5. “是否”查询

let date1 = "2023/09/16", date2 = "2023/08/16"
//1. 是否之前
let result = dayjs(date1).isBefore(dayjs(date2)); //false
//2. 是否之后
let result = dayjs(date1).isAfter(dayjs(date2)); //true
//3.是否相同
let result = dayjs(date1).isSame(dayjs(date2)); //false

//4.其它方法
let result = dayjs(date1).isSameOrBefore(dayjs(date2)); //是否等于或者在2023/8/16之前,返回false
let result = dayjs(date1).isSameOrAfter(dayjs(date2)); //是否等于或者在2023/8/16之后,返回true
let result = dayjs(date1).isBetween('2023/07/01', dayjs(date2)); //是否在[2023/7/1, 2023/8/16]之间,返回false

//5. 是否闰年:需先引入isLeapYear插件,然后使用
var isLeapYear = require('dayjs/plugin/isLeapYear'); 
dayjs.extend(isLeapYear)
dayjs('2000-01-01').isLeapYear() // true

其它查询:需要先加载对应插件,插件加载方式点击查看

6. 常用获取“某个”日期方法

//测试时间:2023/09/03 16:04:19
//1. 获取近7天日期区间
let now = dayjs('2023/09/03 16:04:19');//当前日期对象
let nS7 = now.subtract(7, 'day');//减7天
return [nS7.format('YYYY/MM/DD'), now.format('YYYY/MM/DD')]; //输出:['2023/08/27','2023/09/03']
说明:如果要获取区间集合,可以使用for循环遍历7+每次add(1'day')得到每天的日期数值

//2. 获取某月初日期
方法1:直接利用format('YYYY-MM-01')指定日期
let now = dayjs('2023/09/03 16:04:19');//当前日期对象
return now.format('YYYY-MM-01'); //输出:2023-09-01
方法2:通过startOf
let now = dayjs('2023/09/03 16:04:19');//当前日期对象
return now.startOf('month').format('YYYY-MM-01'); //输出:2023-09-01

//3. 获取某月末日期
方法1:先获取下月1号,再减1let now = dayjs('2023/09/03 16:04:19');//当前日期对象
return now.add(1, 'month').startOf('month').subtract(1, 'day').format('YYYY-MM-DD'); //输出:2023-09-30

方法2(推荐):通过endOf
let now = dayjs('2023/09/03 16:04:19');//当前日期对象
return now.endOf('month').format('YYYY-MM-DD'); //输出:2023-09-30

//4. 获取某年初日期
let now = dayjs('2023/09/03 16:04:19');//当前日期对象
return now.startOf('year').format('YYYY-MM-DD'); //输出:2023-01-01

//5. 获取某年末日期
let now = dayjs('2023/09/03 16:04:19');//当前日期对象
return now.endOf('month').format('YYYY-MM-DD'); //输出:2023-12-31

//6. 获取某周初日期
let now = dayjs('2023/09/03 16:04:19');//当前日期对象
return now.startOf('week').format('YYYY-MM-DD'); //输出:2023-09-03

//7. 获取某周末日期
let now = dayjs('2023/09/03 16:04:19');//当前日期对象
return now.endOf('week').format('YYYY-MM-DD'); //输出:2023-09-09

//8. 获取某日期所属月份的天数
let now = dayjs('2023/09/03 16:04:19');//当前日期对象
return now.daysInMonth(); //输出:30

7. 常用获取“某段”日期集合

//1. 获取近30天的日期集合
function get30Days() {
  let now = "2023/09/03";//假设当日日期为2023.9.30
  let days30 = [now];
  for(let i = 0; i < 30; i++) {
    let day = dayjs(days30[0]).subtract(1, 'day').format('YYYY/MM/DD');
    days30.unshift(day);
  };
  console.log("近30天的日期集合:", JSON.stringify(days30));
  return days30;
}
结果:
["2023/08/04","2023/08/05","2023/08/06","2023/08/07","2023/08/08","2023/08/09","2023/08/10","2023/08/11","2023/08/12","2023/08/13","2023/08/14","2023/08/15","2023/08/16","2023/08/17","2023/08/18","2023/08/19","2023/08/20","2023/08/21","2023/08/22","2023/08/23","2023/08/24","2023/08/25","2023/08/26","2023/08/27","2023/08/28","2023/08/29","2023/08/30","2023/08/31","2023/09/01","2023/09/02","2023/09/03"]

//2. 获取当月日期集合
function getDaysInMonth() {
  let now = "2023/09/03";//假设当日日期为2023.9.30
  let daysNum = dayjs(now).daysInMonth();//获取当月天数,返回30
  let firstDay = dayjs(now).startOf('month').format('YYYY/MM/DD');//获取第一天的日期
  let daysArr = [firstDay];
  for(let i = 0; i < daysNum; i++) {
    let day = dayjs(daysArr[i]).add(1, 'day').format('YYYY/MM/DD');
    daysArr.push(day);
  };
  console.log("当月日期集合:", JSON.stringify(daysArr));
  return daysArr;
}

结果:
["2023/09/01","2023/09/02","2023/09/03","2023/09/04","2023/09/05","2023/09/06","2023/09/07","2023/09/08","2023/09/09","2023/09/10","2023/09/11","2023/09/12","2023/09/13","2023/09/14","2023/09/15","2023/09/16","2023/09/17","2023/09/18","2023/09/19","2023/09/20","2023/09/21","2023/09/22","2023/09/23","2023/09/24","2023/09/25","2023/09/26","2023/09/27","2023/09/28","2023/09/29","2023/09/30","2023/10/01"]


//3. 获取近一年内某月末日期集合
function getMonthsInYear() {
  let now = "2023/09/03";//假设当日日期为2023.9.30
  let startMonth = dayjs(now).subtract(1, 'year').endOf('month').format('YYYY/MM/DD');//获取上一年的同等月末日期,返回2022/09/30
  
  let monthArr = [startMonth];
  for(let i = 0; i < 12; i++) {//近一年,12个月
    let month = dayjs(monthArr[i]).add(1, 'month').format('YYYY/MM/DD');
    if( dayjs(now).isAfter(dayjs(month)) ) {//月末日期不得大于2023.9.30
      monthArr.push(month);
    }
  };
  console.log("近一年内月末日期集合:", JSON.stringify(monthArr));
  return monthArr;
}
结果:
["2022/09/30","2022/10/30","2022/11/30","2022/12/30","2023/01/30","2023/02/28","2023/03/28","2023/04/28","2023/05/28","2023/06/28","2023/07/28","2023/08/28"]

最后

暂时先更新到这儿、后续会持续更新…
学海无涯~~~~~

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值