一些特殊需求要用到日期,如某月的开始结束时间;时间戳转换;某月的天数等。将js一些获取时间的方法等汇总!方便自己以后查阅。
前言
对于前端可以用一些时间插件,来快速实现所需要的时间格式,但是不太想用,所以就自己汇总一些平时开发中用到的函数和方法!
一、js时间方法
console.log(new Date().getFullYear()) // 2023
console.log(new Date().getMonth()) // 7 月份从0-11
console.log(new Date().getDate()) // 14 天数
console.log(new Date().getHours()) // 14 小时
console.log(new Date().getMinutes()) // 36 分钟
console.log(new Date().getSeconds()) // 秒
console.log(new Date().getDay()) // 1 星期几
console.log(new Date().getTime()) // 时间戳
二、封装的一些方法
1.时间类--返回编译后的格式化的时间
/*
1.时间--时间格式编译
参数:(time:时间,formatStr:yyyy-MM-dd hh:mm:ss)
参数1 Mon Aug 15 2022 15:06:06 GMT+0800 (中国标准时间)
参数2 yyyy-MM-dd hh:mm:ss
使用:this.timeFormatData(new Date())
功能:返回编译后的格式化的时间
*/
function timeFormatData(time, formatStr) {
let date = new Date(time);
let onlyDay = date.getDate();
let onleHour = date.getHours();
let onlyMin = date.getMinutes();
let onlySec = date.getSeconds();
let Y = date.getFullYear();
let M =
date.getMonth() + 1 < 10
? "0" + (date.getMonth() + 1)
: date.getMonth() + 1;
let D = onlyDay < 10 ? "0" + onlyDay : onlyDay;
let h = onleHour < 10 ? "0" + onleHour : onleHour;
let m = onlyMin < 10 ? "0" + onlyMin : onlyMin;
let s = onlySec < 10 ? "0" + onlySec : onlySec;
formatStr = formatStr || "YYYY-MM-DD H:m:s";
return formatStr.replace(/YYYY|MM|DD|H|m|s/gi, function (matches) {
return {
YYYY: Y,
MM: M,
DD: D,
H: h,
m: m,
s: s,
}[matches];
});
}
2.时间类--同上 ,多加两个方法 获取当前月份第一天和最后一天
/*
2.时间--时间格式编译
参数:(fmt:yyyy-MM-dd hh:mm:ss , data)
参数1 Mon Aug 15 2022 15:06:06 GMT+0800 (中国标准时间)
参数2 data: this.getCurrentMonthFirst() 或 data:this.getCurrentMonthLast()
使用:
获取本月第一天
this.getformat(yyyy-MM-dd,this.getCurrentMonthFirst())
获取本月最后一天
this.getformat(yyyy-MM-dd,this.getCurrentMonthLast())
功能:同上 ,多加两个方法 获取当前月份第一天和最后一天
*/
function getformat(fmt, date) {
var o = {
"M+": date.getMonth() + 1, //月份
"d+": date.getDate(), //日
"h+": date.getHours(), //小时
"m+": date.getMinutes(), //分
"s+": date.getSeconds(), //秒
"q+": Math.floor((date.getMonth() + 3) / 3), //季度
"S": date.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt))
fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o)
if (new RegExp("(" + k + ")").test(fmt))
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
return fmt;
}
function getCurrentMonthFirst() {
var date = new Date()
date.setDate(1)
return date
}
function getCurrentMonthLast() {
var date = new Date();
var currentMonth = date.getMonth();
var nextMonth = ++currentMonth;
var nextMonthFirstDay = new Date(date.getFullYear(), nextMonth, 1);
var oneDay = 1000 * 60 * 60 * 24;
return new Date(nextMonthFirstDay - oneDay);
}
3.时间类--获取传入的年月 有几天,返回天数
/*
参数:传入年, 月 如2022 , 8
使用:this.getLastDayTime(2022,8)
功能:获取传入的年月 有几天,返回天数 如:8月份 返回 31
*/
function getLastDayTime(year,month) {
var new_year = year; //取当前的年份
var new_month = month++;//取下一个月的第一天,方便计算(最后一天不固定)
if(month>12) {
new_month -=12; //月份减
new_year++; //年份增
}
var new_date = new Date(new_year,new_month,1); //取当年当月中的第一天
return (new Date(new_date.getTime()-1000*60*60*24)).getDate();//获取当月最后一天日期
}
4.时间类--传入开始结束的年月日 返回开始到结束的日期
/*
参数:如:2022-08-01 2022-08-31
使用:this.getAll(2022-08-01,2022-08-31)
功能:传入开始结束的年月日 返回开始到结束的日期 [2022-08-01,2022-08-02,....2022-08-31,]
补充:setUTCFullYear()方法属于js方法 返回标准化时间日期
*/
function getAll(begin, end) {
var arr = []
var ab = begin.split('-')
var ae = end.split('-')
var db = new Date()
db.setUTCFullYear(ab[0], ab[1] - 1, ab[2])
var de = new Date()
de.setUTCFullYear(ae[0], ae[1] - 1, ae[2])
var unixDb = db.getTime() - 24 * 60 * 60 * 1000
var unixDe = de.getTime() - 24 * 60 * 60 * 1000
for (var k = unixDb; k <= unixDe; ) {
k = k + 24 * 60 * 60 * 1000
arr.push(this.format(new Date(parseInt(k))))
}
return arr
}
function format(data) {
var s = ''
var mouth =
data.getMonth() + 1 >= 10
? data.getMonth() + 1
: '0' + (data.getMonth() + 1)
var day = data.getDate() >= 10 ? data.getDate() : '0' + data.getDate()
s += data.getFullYear() + '-' // 获取年份。
s += mouth + '-' // 获取月份。
s += day // 获取日。
return s // 返回日期。
}
5.时间类--返回当前日期的星期数
/*
参数:日期 返回名 如:(2022-08-15 ,工作)
使用:this.TimeZR(2022-08-15)
功能:返回当前日期的星期数
补充:getDay() 方法可返回一周(0~6)的某一天的数字。
注意: 星期天为 0, 星期一为 1, 以此类推。
*/
function TimeZR(value, name) {
let date = value ? new Date(value) : new Date();
let str = name ? name : "星期";
let week = date.getDay();
switch (week) {
case 0:
str += "日";
break;
case 1:
str += "一";
break;
case 2:
str += "二";
break;
case 3:
str += "三";
break;
case 4:
str += "四";
break;
case 5:
str += "五";
break;
case 6:
str += "六";
break;
}
return str
}
6.时间类--根据指定时间获取上一个月
/*
功能:时间--根据指定时间获取上一个月
参数:data 2022-08-17 这种格式
*/
function getPreMonth(date) {
var arr = date.split('-');
var year = arr[0]; //获取当前日期的年份
var month = arr[1]; //获取当前日期的月份
var day = arr[2]; //获取当前日期的日
var days = new Date(year, month, 0);
days = days.getDate(); //获取当前日期中月的天数
var year2 = year;
var month2 = parseInt(month) - 1;
if (month2 == 0) {
year2 = parseInt(year2) - 1;
month2 = 12;
}
var day2 = day;
var days2 = new Date(year2, month2, 0);
days2 = days2.getDate();
if (day2 > days2) {
day2 = days2;
}
if (month2 < 10) {
month2 = '0' + month2;
}
var t2 = year2 + '-' + month2 ;
return t2;
}
7.时间类--根据指定时间获取下一个月
/*
功能:时间--根据指定时间获取下一个月
参数:data 2022-08-17 这种格式
*/
function getNextMonth(date) {
var arr = date.split('-');
var year = arr[0]; //获取当前日期的年份
var month = arr[1]; //获取当前日期的月份
var day = arr[2]; //获取当前日期的日
var days = new Date(year, month, 0);
days = days.getDate(); //获取当前日期中的月的天数
var year2 = year;
var month2 = parseInt(month) + 1;
if (month2 == 13) {
year2 = parseInt(year2) + 1;
month2 = 1;
}
var day2 = day;
var days2 = new Date(year2, month2, 0);
days2 = days2.getDate();
if (day2 > days2) {
day2 = days2;
}
if (month2 < 10) {
month2 = '0' + month2;
}
var t2 = year2 + '-' + month2 + '-' + day2;
return t2;
}
总结
简单记录一下开发中遇到一些时间的处理。当然也有一些好用的插件,不过我基本不用,上面用来传参,或条件变更时候写!