JS实用小方法-获取向前或向后几天的日期与星期(附严格模式下未知参数解决方案)

一、代码注释详解

参数相关

  • directionFlag参数控制生成时间的方向,'before'当前时间向前,'after'当前时间向后, 默认为向后生成
  • fewDays 参数控制向前或向后显示的天数 默认一周 例:3,'15'
  • dateType 参数控制返回的时间格式, 默认'-',即以'-'为分割符 例: '.','/','-'
  • weekType 参数控制返回的周前缀文字相关, 默认'星期' 例: '周','星期'
  • zeroFillFlag 参数控制返回的时间是否数字补零,默认true(小于9补零前面补零)
  • reverseFlag 参数控制返回的数组是否翻转, 默认false(按正常尾部添加的顺序显示数组)
  • 控制返回的数组是否翻转也可以直接在方法中使用unshift方法替换push实现同样效果,本次不做演示

参数为对象,属性名需对应方法内argumentsObj对象

返回数据

  • 参数组合繁多,应用场景广泛,下列数据为(无参-默认数据),具体使用方法可根据业务场景自由扩展。

代码注释详解

ini 复制代码
const leFn = (param = {}) => {
  // 定义默认对象
  let argumentsObj = {
    directionFlag: "after",
    fewDays: 7,
    dateType: "-",
    weekType: "星期",
    zeroFillFlag: true,
    reverseFlag: false,
  };
  // 解决严格模式下的未知位数参数问题
     argumentsObj = { ...argumentsObj, ...param };
   
  // 使用Object.assign()方法合并两个对象,b对象的属性会覆盖a对象的相同属性
  // 备用方案 argumentsObj = Object.assign({}, argumentsObj, param);
  
  // 获取当前时间戳
  let time = new Date().getTime();
  // 计算一天的毫秒数
  let oneDay = 60 * 60 * 24 * 1000;
  // 定义一个数组来存储一周的顺序文字
  let weekTxtList = ["日", "一", "二", "三", "四", "五", "六"];
  // 定义星期数组
  let weekList = [];
  // 依照fewDays参数循环生成指定天数的日期并添加进weekList数组
  for (let i = 1; i <= Number(argumentsObj.fewDays); i++) {
    // 依照directionFlag参数计算指定天数的时间戳
    let countTime =
      argumentsObj.directionFlag == "after"
        ? time + i * oneDay
        : time - i * oneDay;
    // 数字补零
    let Y = new Date(countTime).getFullYear();
    let M = new Date(countTime).getMonth() + 1;
    let zeroFillM = M > 9 ? M : "0" + M;
    let D = new Date(countTime).getDate();
    let zeroFillD = D > 9 ? D : "0" + D;
    // dateType控制间隔
    // zeroFillFlag控制补零
    // weekType控制周/星期相关类型文字
    // 此处date略显散乱  总结一眼公式即:  年+ 时间间隔符 + 月(是否补零)+ 时间间隔符+ 日(是否补零)
    // week即: 周/星期相关前缀文字 + 当前的周文字
    // new Date(countTime).getDay()得到周数字相关,通过定义的weekTxtList数组取到当前的周文字
    weekList.push({
      date: `${Y}${argumentsObj.dateType}${
        argumentsObj.zeroFillFlag ? zeroFillM : M
      }${argumentsObj.dateType}${argumentsObj.zeroFillFlag ? zeroFillD : D}`,
      week: argumentsObj.weekType + weekTxtList[new Date(countTime).getDay()],
    });
  }
  // 是否翻转数组
  return argumentsObj.reverseFlag ? (weekList = weekList.reverse()) : weekList;
};
console.log(leFn());
相关推荐
宇擎智脑科技5 分钟前
Claude Code 源码分析(七):终端 UI 工程 —— 用 React Ink 构建工业级命令行界面
前端·人工智能·react.js·ui·claude code
dragon72516 分钟前
Flutter错误处理机制
前端·flutter
数据知道18 分钟前
claw-code 源码详细分析:Bootstrap Graph——启动阶段图式化之后,排障与扩展为什么会变简单?
前端·算法·ai·bootstrap·claude code·claw code
悟空瞎说27 分钟前
深度解析:Vue3 为何弃用 defineProperty,Proxy 到底强在哪里?
前端·javascript
leafyyuki29 分钟前
告别 Vuex 的繁琐!Pinia 如何以更优雅的方式重塑 Vue 状态管理
前端·javascript·vue.js
Amos_Web31 分钟前
Solana开发(1)- 核心概念扫盲篇&&扫雷篇
前端·rust·区块链
Hooray38 分钟前
AI 时代的管理后台框架,应该是什么样子?
前端·vue.js·ai编程
ZC跨境爬虫39 分钟前
极验滑动验证码自动化实战(ddddocr免费方案):本地缺口识别与Playwright滑动模拟
前端·爬虫·python·自动化
某人辛木44 分钟前
nodejs下载安装
开发语言·前端·javascript
Ztopcloud极拓云视角1 小时前
Claude Code 源码泄露事件技术复盘:npm sourcemap 配置失误的完整分析
前端·npm·node.js