优化这段代码:// 获取周报开始时间和结束时间 const getWeekBetweenTime = async (val: string) => { let startTime: string; let endTime: string; // 判断是否是1月 if (val.slice(-2) === '01') { startTime = dayjs().format('YYYY-MM-DD'); // 获取工作周设定数据 let res: any = await getWeekData(val.substring(0, 4)); if (res) { startTime = res; } else { startTime = ''; } } else { // 不是1月 let startWeek = dayjs(`${val}-01`).day(); // 星期一时间 if (startWeek === 1) { startTime = dayjs(`${val}-01`).format('YYYY-MM-DD'); } else { // 非星期一时间 - 获取礼拜一 startTime = dayjs(`${val}-01`).subtract(startWeek - 1, 'day').format('YYYY-MM-DD'); } } // 获取当前月星期几 let endWeek = dayjs(`${val}-01`).endOf('month').day(); // 计算结束时间 if (endWeek === 0) { endTime = dayjs(`${val}-01`).endOf('month').format('YYYY-MM-DD'); } else { endTime = dayjs(`${val}-01`).endOf('month').add(7 - endWeek, 'day').format('YYYY-MM-DD'); } return { startTime: startTime, endTime: endTime, }; };
时间: 2024-02-14 10:05:12 浏览: 84
ES6变量声明与赋值:值传递、浅拷贝与深拷贝详解
可以优化的地方如下:
1. 减少重复代码:多次使用 `${val}-01`,可以将其提取出来,只计算一次即可。
2. 简化逻辑:可以将判断是否是1月的代码和获取开始时间的代码合并,这样可以减少一次代码分支。
3. 使用 dayjs 提供的函数:dayjs 提供了一些函数可以简化代码,例如 `startOf` 和 `add`,可以用来代替手动计算时间差的代码。
修改后的代码如下:
```typescript
const getWeekBetweenTime = async (val: string) => {
const date = dayjs(`${val}-01`);
let startTime: string;
if (date.month() === 0) {
// 1月份
const res = await getWeekData(val.substring(0, 4));
startTime = res || date.format('YYYY-MM-DD');
} else {
// 非1月份
const startWeek = date.day();
const monday = date.subtract(startWeek - 1, 'day');
startTime = startWeek === 1 ? date.format('YYYY-MM-DD') : monday.format('YYYY-MM-DD');
}
const endWeek = date.endOf('month').day();
const lastDay = date.endOf('month');
const end = endWeek === 0 ? lastDay : lastDay.add(7 - endWeek, 'day');
return {
startTime,
endTime: end.format('YYYY-MM-DD'),
};
};
```
阅读全文