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());
相关推荐
liangshanbo12155 分钟前
写好 React useEffect 的终极指南
前端·javascript·react.js
哆啦A梦15882 小时前
搜索页面布局
前端·vue.js·node.js
_院长大人_3 小时前
el-table-column show-overflow-tooltip 只能显示纯文本,无法渲染 <p> 标签
前端·javascript·vue.js
SevgiliD3 小时前
el-table中控制单列内容多行超出省略及tooltip
javascript·vue.js·elementui
要加油哦~3 小时前
JS | 知识点总结 - 原型链
开发语言·javascript·原型模式
哆啦A梦15884 小时前
axios 的二次封装
前端·vue.js·node.js
阿珊和她的猫4 小时前
深入理解与手写发布订阅模式
开发语言·前端·javascript·vue.js·ecmascript·状态模式
yinuo4 小时前
一行 CSS 就能搞定!用 writing-mode 轻松实现文字竖排
前端
AI大模型4 小时前
别再瞎学大模型了,这份GitHub神级课程火爆全网(附GitHub 仓库)
程序员·llm·agent
snow@li5 小时前
html5:拖放 / demo / 拖放事件(Drag Events)/ DataTransfer 对象方法
前端·html·拖放