日期处理函数工具库

这段代码包含了一系列关于日期和时间处理的JavaScript函数,包括获取指定月份的天数、周数组、近6个月的日期、n天后的日期、月份的开始和结束日期、上一个月和下一个月的日期,以及当前日期的格式化。此外,还有获取当前周和月的第一天和最后一天的方法。这些函数对于处理日期相关的计算和格式转换非常实用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

根据年月获取当月的总天数

获取指定月份的周数日期数组

获取当前时间近6个月

获取n天后的日期

查询月份开始和结束日期

获取指定日期的上一个月

获取指定日期的下一个月 

获取当前日期并格式化

获取当前周的第一天和最后一天

获取当前月的第一天和最后一天

时间格式化


根据年月获取当月的总天数

// 根据年月获取当月的总天数
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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端 贾公子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值