目录
根据年月获取当月的总天数
// 根据年月获取当月的总天数
let getDays = function (year, month) {
if (month === 2) {
return ((year % 4 === 0) && ((year % 100) !== 0)) || (year % 400 === 0) ? 29 : 28
} else {
return daysInMonth[month - 1]
}
}
获取指定月份的周数日期数组
function weeks (now_month) {
let week_array = [];
let today = new Date(Date.parse(now_month));
let year = today.getFullYear();
let month = today.getMonth();
let i = 0;
let start = new Date(year, month, 1); // 得到当月第一天
let end = new Date(year, month+1, 0); // 得到当月最后一天
// 循环每周最后天叠设置为第一天,直到最后一天小于当月的最后一天
while (start <= end ) {
const monday = new Date(start.getTime());
const sunday = new Date(start.getTime());
monday.setDate(monday.getDate()+1-monday.getDay());
sunday.setDate(sunday.getDate()+7-sunday.getDay());
week_array.push(
[monday,sunday]
)
start = sunday;
}
return week_array;
}
获取当前时间近6个月
getLastSixMon() {
// 获取最近六个月
var data = new Date();
//获取年
var year = data.getFullYear();
//获取月
var mon = data.getMonth() + 1;
var arry = new Array();
for (var i = 0; i < 6; i++) {
if (mon <= 0) {
year = year - 1;
mon = mon + 12;
}
arry[i] = year + "-" + mon;
mon = mon - 1;
}
return arry
},
获取n天后的日期
function getNextDate(date, day = 1, format = "{y}-{m}-{d}") {
if (date) {
//处理传入年月日格式 例如 date = 2022年07月12日
date = date.match(/\d+/g).join("-");
//方式二处理传入年月日格式 (需要针对是否是年月日格式判断)
//date = date.replace(/[年月日]/g, "-").slice(0, -1);
//方式三处理传入年月日格式
//date = date.replace(/[年月]/g, "-").replace("日", "");
// console.log(date, "date"); // 2022-07-12
const nDate = new Date(date);
nDate.setDate(nDate.getDate() + day);
const formatObj = {
y: nDate.getFullYear(),
m: nDate.getMonth() + 1,
d: nDate.getDate(),
};
return format.replace(/{([ymd])+}/g, (result, key) => {
const value = formatObj[key];
return value.toString().padStart(2, "0");
});
} else {
console.log("date为空或格式不正确");
}
}
查询月份开始和结束日期
// 查询月份开始结束
//开始日期
function getFirstDayOfMonth(year, month) {
// return new Date(year, month-1, 1);
let data = new Date(year, month - 1, 1);
return (
data.getFullYear() +
"-" +
(data.getMonth() + 1 > 9
? data.getMonth() + 1
: "0" + (data.getMonth() + 1)) +
"-" +
(data.getDate() > 9 ? data.getDate() : "0" + data.getDate())
);
}
//结束日期
function getLastDayOfMonth(year, month) {
let data = new Date(year, month, 0);
return (
data.getFullYear() +
"-" +
(data.getMonth() + 1 > 9
? data.getMonth() + 1
: "0" + (data.getMonth() + 1)) +
"-" +
(data.getDate() > 9 ? data.getDate() : "0" + data.getDate())
);
}
function test1(){
//示例
println('2018年5月:' + getFirstDayOfMonth(2018,5) + ',' + getLastDayOfMonth(2018,5));
}
获取指定日期的上一个月
// 获取指定日期的上一个月
function getPreMonth(date) {
//判断日期常用格式的正则
let regA = /^(\d{4})-(\d{1,2})-(\d{1,2})$/, //日期格式为:yyyy-mm-dd
regB = /^(\d{4})年(\d{1,2})月(\d{1,2})日$/, //日期格式为:yyyy年mm月dd日
regC = /^(\d{4})年-(\d{1,2})月-(\d{1,2})日$/, //日期格式为:yyyy年-mm月-dd日
regD = /^(\d{4})(\d{2})(\d{2})$/, //日期格式为:yyyymmdd
regE = /^(\d{4})-(\d{1,2})-(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/, //日期格式为:yyyy-mm-dd hh:mm:ss
regF = /^(\d{4})年(\d{1,2})月(\d{1,2})日 (\d{1,2}):(\d{1,2}):(\d{1,2})$/, //日期格式为:yyyy年mm月dd日 hh:mm:ss
regG = /^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/; //日期格式为:yyyymmddhhmmss
//判断传入的日期进行正则表达式匹配
let arr = [];
switch (true) {
case regA.test(date):
case regB.test(date):
case regC.test(date):
case regD.test(date):
arr.push(RegExp.$1, RegExp.$2, RegExp.$3); //RegExp.$1获取匹配到的第一个值匹配,即‘2022’,以此类推
console.log(arr, "arr");
break;
case regE.test(date):
case regF.test(date):
case regG.test(date):
arr.push(
RegExp.$1,
RegExp.$2,
RegExp.$3,
RegExp.$4,
RegExp.$5,
RegExp.$6
);
console.log(arr, "arr");
break;
default:
console.log("没有满足的日期格式");
return;
}
arr = [...arr];
let [year, month, day, hour, minute, second] = arr;
let newYear = year,
newDay = day,
newMonth = parseInt(month) - 1;
if (newMonth == 0) {
newYear = parseInt(newYear) - 1;
newMonth = 12;
}
let lastDays = new Date(newYear, newMonth, 0);
lastDays = lastDays.getDate();
newDay = newDay > lastDays ? lastDays : newDay;
newMonth =
newMonth < 10 && String(newMonth).length < 2 ? "0" + newMonth : newMonth;
newDay = newDay < 10 && newDay.length < 2 ? "0" + newDay : newDay;
minute = minute < 10 && minute.length < 2 ? "0" + minute : minute;
second = second < 10 && second.length < 2 ? "0" + second : second;
return arr.length > 3
? `${newYear}-${newMonth}-${newDay} ${hour}:${minute}:${second}`
: `${newYear}-${newMonth}-${newDay}`;
}
function dateRegexFun(date, obj) {
for (let key in obj) {
// console.log(date.match(obj[key]))
if (date.match(obj[key])) return date.match(obj[key]);
}
}
获取指定日期的下一个月
function getNextMonth(date) {
//判断日期常用格式的正则
let regObj = {
regA: /^(\d{4})-(\d{1,2})-(\d{1,2})$/, //日期格式为:yyyy-mm-dd
regB: /^(\d{4})年(\d{1,2})月(\d{1,2})日$/, //日期格式为:yyyy年mm月dd日
regC: /^(\d{4})年-(\d{1,2})月-(\d{1,2})日$/, //日期格式为:yyyy年-mm月-dd日
regD: /^(\d{4})(\d{2})(\d{2})$/, //日期格式为:yyyymmdd
},
regObj2 = {
regE: /^(\d{4})-(\d{1,2})-(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/, //日期格式为:yyyy-mm-dd hh:mm:ss
regF: /^(\d{4})年(\d{1,2})月(\d{1,2})日 (\d{1,2}):(\d{1,2}):(\d{1,2})$/, //日期格式为:yyyy年mm月dd日 hh:mm:ss
regG: /^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/, //日期格式为:yyyymmddhhmmss
};
//判断传入的日期进行正则表达式匹配
let arr = [],
valArr = [];
//调用日期正则匹配公共方法
if (dateRegexFun(date, regObj)) {
valArr = dateRegexFun(date, regObj);
arr.push(valArr[1], valArr[2], valArr[3]);
}
//调用日期正则匹配公共方法
if (dateRegexFun(date, regObj2)) {
valArr = dateRegexFun(date, regObj2);
arr.push(valArr[1], valArr[2], valArr[3], valArr[4], valArr[5], valArr[6]);
}
if (arr.length === 0) return;
arr = [...arr];
let [year, month, day, hour, minute, second] = arr;
let newYear = year,
newDay = day,
newMonth = parseInt(month) + 1;
if (newMonth == 13) {
newYear = parseInt(newYear) + 1;
newMonth = 1;
}
let nextDays = new Date(newYear, newMonth, 0);
nextDays = nextDays.getDate();
newDay = newDay > nextDays ? nextDays : newDay;
newMonth =
newMonth < 10 && String(newMonth).length < 2 ? "0" + newMonth : newMonth;
newDay = newDay < 10 && newDay.length < 2 ? "0" + newDay : newDay;
minute = minute < 10 && minute.length < 2 ? "0" + minute : minute;
second = second < 10 && second.length < 2 ? "0" + second : second;
return arr.length > 3
? `${newYear}-${newMonth}-${newDay} ${hour}:${minute}:${second}`
: `${newYear}-${newMonth}-${newDay}`;
}
function dateRegexFun(date, obj) {
for (let key in obj) {
// console.log(date.match(obj[key]))
if (date.match(obj[key])) return date.match(obj[key]);
}
}
获取当前日期并格式化
var myDate = new Date(); //创建Date对象
var Y = myDate.getFullYear(); //获取当前完整年份
var M = myDate.getMonth() + 1; //获取当前月份
var D = myDate.getDate(); //获取当前日1-31
var H = myDate.getHours(); //获取当前小时
var i = myDate.getMinutes(); //获取当前分钟
var s = myDate.getSeconds(); //获取当前秒数
// 月份不足10补0
if(M < 10){
M = '0' + M;
}
// 日不足10补0
if(D < 10){
D = '0' + D;
}
// 小时不足10补0
if(H < 10){
H = '0' + H;
}
// 分钟不足10补0
if(i < 10){
i = '0' + i;
}
// 秒数不足10补0
if(s < 10){
s = '0' +s;
}
// 拼接日期分隔符根据自己的需要来修改
var nowDate = Y+'-'+M+'-'+D+' '+H+':'+i+':'+s;
alert(nowDate);
获取当前周的第一天和最后一天
getNowWeeklyDay() {
//本周第一天
let startTime = new Date(new Date().getTime() - (3600 * 1000 * 24 * (new Date().getDay() - 1)))
//本周最后一天
let endTime = new Date(new Date().getTime() + (3600 * 1000 * 24 * (7 - new Date().getDay())))
}
获取当前月的第一天和最后一天
getMonthDay() {
const date = new Date()
const startTime = date.setDate(1); //本月第一天
const endTime = new Date(date.getFullYear(), date.getMonth() + 1, 0)//本月的最后一天
}
时间格式化
function format(time){
const dat = new Date(time)
var year = dat.getFullYear();
var mon = (dat.getMonth()+1) < 10 ? "0"+(dat.getMonth()+1) : dat.getMonth()+1;
var data = dat.getDate() < 10 ? "0"+(dat.getDate()) : dat.getDate();
var hour = dat.getHours() < 10 ? "0"+(dat.getHours()) : dat.getHours();
var min = dat.getMinutes() < 10 ? "0"+(dat.getMinutes()) : dat.getMinutes();
var seon = dat.getSeconds() < 10 ? "0"+(dat.getSeconds()) : dat.getSeconds();
var newDate = year +"-"+ mon +"-"+ data +" "+ hour +":"+ min +":"+ seon;
return newDate;
}