原生时间
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、时间戳
- 精确到毫秒
moment().valueOf()
- 精确到秒
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')