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());