自定义快速获取开始时间结束时间函数

本文介绍了一个实用的JavaScript日期操作工具包,包括获取指定日期、本周、上周、下周、本月、上月、下月以及今年、去年、明年的起始和结束日期的方法。这些功能对于快速开发日期相关的应用非常有用。

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


const getDateFn = {
  //1、 得到今天、昨天、明天日期
  //dates为数字类型,0代表今日,-1代表昨日,1代表明日,返回yyyy-mm-dd格式字符串,dates不传默认代表今日。
  getDate(dates) {
    var dd = new Date();
    var n = dates || 0;
    dd.setDate(dd.getDate() + n);
    var y = dd.getFullYear();
    var m = dd.getMonth() + 1;
    var d = dd.getDate();
    m = m < 10 ? "0" + m : m;
    d = d < 10 ? "0" + d : d;
    var day = y + "-" + m + "-" + d;
    return day;
  },
  //2、得到本周、上周、下周的起始、结束日期
  //type为字符串类型,有两种选择,"s"代表开始,"e"代表结束,dates为数字类型,不传或0代表本周,-1代表上
  getMonday(type, dates) {
    var now = new Date();
    var nowTime = now.getTime();
    var day = now.getDay();
    var longTime = 24 * 60 * 60 * 1000;
    var n = longTime * 7 * (dates || 0);
    if (type == "s") {
      var dd = nowTime - (day - 1) * longTime + n;
    }
    if (type == "e") {
      var dd = nowTime + (7 - day) * longTime + n;
    }
    dd = new Date(dd);
    var y = dd.getFullYear();
    var m = dd.getMonth() + 1;
    var d = dd.getDate();
    m = m < 10 ? "0" + m : m;
    d = d < 10 ? "0" + d : d;
    var day = y + "-" + m + "-" + d;
    return day;
  },
  //3、得到本月、上月、下月的起始、结束日期
  //type为字符串类型,有两种选择,"s"代表开始,"e"代表结束,months为数字类型,0代表本月,-1代表上月,1代表下月
  getMonth(type, months) {
    var d = new Date();
    var year = d.getFullYear();
    var month = d.getMonth() + 1;
    if (Math.abs(months) > 12) {
      months = months % 12;
    }
    if (months != 0) {
      if (month + months > 12) {
        year++;
        month = (month + months) % 12;
      } else if (month + months < 1) {
        year--;
        month = 12 + month + months;
      } else {
        month = month + months;
      }
    }
    month = month < 10 ? "0" + month : month;
    var date = d.getDate();
    var firstday = year + "-" + month + "-" + "01";
    var lastday = "";
    if (
      month == "01" ||
      month == "03" ||
      month == "05" ||
      month == "07" ||
      month == "08" ||
      month == "10" ||
      month == "12"
    ) {
      lastday = year + "-" + month + "-" + 31;
    } else if (month == "02") {
      if (
        (year % 4 == 0 && year % 100 != 0) ||
        (year % 100 == 0 && year % 400 == 0)
      ) {
        lastday = year + "-" + month + "-" + 29;
      } else {
        lastday = year + "-" + month + "-" + 28;
      }
    } else {
      lastday = year + "-" + month + "-" + 30;
    }
    var day = "";
    if (type == "s") {
      day = firstday;
    } else {
      day = lastday;
    }
    return day;
  },
  //4、得到今年、去年、明年的开始、结束日期
  //type为字符串类型,有两种选择,"s"代表开始,"e"代表结束,dates为数字类型,不传或0代表今年,-1代表去年,1代表明年
  getYear(type, dates) {
    var dd = new Date();
    var n = dates || 0;
    var year = dd.getFullYear() + Number(n);
    if (type == "s") {
      var day = year + "-01-01";
    }
    if (type == "e") {
      var day = year + "-12-31";
    }
    if (!type) {
      var day = year + "-01-01/" + year + "-12-31";
    }
    return day;
  },
};

const switchGetDateFn = function (val) {
  switch (val) {
    case "今天":
      return [getDateFn.getDate(0), getDateFn.getDate(0)];
    case "昨天":
      return [getDateFn.getDate(-1), getDateFn.getDate(-1)];
    case "明天":
      return [getDateFn.getDate(1), getDateFn.getDate(1)];
    case "本周":
      return [getDateFn.getMonday("s", 0), getDateFn.getMonday("e", 0)];
    case "上周":
      return [getDateFn.getMonday("s", -1), getDateFn.getMonday("e", -1)];
    case "下周":
      return [getDateFn.getMonday("s", 1), getDateFn.getMonday("e", -1)];
    case "本月":
      return [getDateFn.getMonth("s", 0), getDateFn.getMonth("e", 0)];
    case "上月":
      return [getDateFn.getMonth("s", -1), getDateFn.getMonth("e", -1)];
    case "下月":
      return [getDateFn.getMonth("s", 1), getDateFn.getMonth("e", -1)];
    case "今年":
      return [getDateFn.getYear("s", 0), getDateFn.getYear("e", 0)];
    case "去年":
      return [getDateFn.getYear("s", -1), getDateFn.getYear("e", -1)];
    case "明年":
      return [getDateFn.getYear("s", 1), getDateFn.getYear("e", -1)];
  }
};

export { getDateFn, switchGetDateFn };
//import{ } from "@/utils/getDateFn"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值