在日常开发中,获取时间的需求是必不可少的,可以说是经常出现,这不,近段时间接触了几个项目里面就有好几处出现了时间获取的需求。下面本文将以react antd为技术栈,时间插件主要采用moment插件二次封装,展现一个封装的函数,在moment插件已有的方法基础上,再增加【上周、上月、上季度、上年】几个时间段的方法,即拿即用:
代码语言:javascript复制// 日期推算算法 根据调用返回【上周、上月、上季度、上年】,返回类型为moment
const areDataReckon = (type: string) => {
let myData: any = [], year = moment().year(), month = moment().month(),
quarter = moment().quarter(), firstDay = 0, lastDay = 0;
/**
* 时间获取思路一周:按照国外计算方法,获取上周一及本周日时间,即为上周时间
* moment().year() 获取当前年 返回值number
* moment().month() 获取月 返回值number 范围为 0-11
*/
// 上周
if (type === '上周') {
myData = [
moment(moment().day(-6).format('YYYY-MM-DD'), 'YYYY-MM-DD'),
moment(moment().day(0).format('YYYY-MM-DD'), 'YYYY-MM-DD')
]
}
// 上月
else if (type === '上月') {
// console.log("firstDay, lastDay:", firstDay, lastDay);
// month = 2;
switch (month) {
case 0:
year -= 1;
month = 12;
firstDay = 1;
lastDay = 31;
myData = [
moment(`${year}-${month}-0${firstDay}`, 'YYYY-MM-DD'),
moment(`${year}-${month}-${lastDay}`, 'YYYY-MM-DD')
];
break;
case 11:
firstDay = 1;
lastDay = 30;
myData = [
moment(`${year}-${month}-0${firstDay}`, 'YYYY-MM-DD'),
moment(`${year}-${month}-${lastDay}`, 'YYYY-MM-DD')
];
break;
case 10:
firstDay = 1;
lastDay = moment(`${year}-${month}`, "YYYY-MM").daysInMonth(); //获取当前月份总天数
myData = [
moment(`${year}-${month}-0${firstDay}`, 'YYYY-MM-DD'),
moment(`${year}-${month}-${lastDay}`, 'YYYY-MM-DD')
];
break;
default:
firstDay = 1;
lastDay = moment(`${year}-0${month}`, "YYYY-MM").daysInMonth(); //获取当前月份总天数
myData = [
moment(`${year}-0${month}-0${firstDay}`, 'YYYY-MM-DD'),
moment(`${year}-0${month}-${lastDay}`, 'YYYY-MM-DD')
];
break;
}
}
// 上季度
else if (type === '上季度') {
switch (quarter) {
case 1:
year -= 1;
firstDay = 1;
lastDay = moment(`${year}-12`, "YYYY-MM").daysInMonth();
myData = [
moment(`${year}-09-0${firstDay}`, 'YYYY-MM-DD'),
moment(`${year}-12-${lastDay}`, 'YYYY-MM-DD')
];
break;
case 2:
firstDay = 1;
lastDay = moment(`${year}-03`, "YYYY-MM").daysInMonth();
myData = [
moment(`${year}-01-0${firstDay}`, 'YYYY-MM-DD'),
moment(`${year}-03-${lastDay}`, 'YYYY-MM-DD')
];
break;
case 3:
firstDay = 1;
lastDay = moment(`${year}-06`, "YYYY-MM").daysInMonth();
myData = [
moment(`${year}-04-0${firstDay}`, 'YYYY-MM-DD'),
moment(`${year}-06-${lastDay}`, 'YYYY-MM-DD')
];
break;
case 4:
firstDay = 1;
lastDay = moment(`${year}-09`, "YYYY-MM").daysInMonth();
myData = [
moment(`${year}-07-0${firstDay}`, 'YYYY-MM-DD'),
moment(`${year}-09-${lastDay}`, 'YYYY-MM-DD')
];
break;
}
}
else if (type = '上年') {
myData = [
moment(`${moment().year()-1}-01-01`, 'YYYY-MM-DD'),
moment(`${moment().year()-1}-12-31`, 'YYYY-MM-DD')
];
}
// console.log("字符串时间:", moment(myData[0]).format('YYYY MM DD'));
return myData
}
这个时候,如果想获取上周的时间段(上周的第一天至上周的最后一天),那就这样调用即可(如果想调用其他的直接把‘上周’的字替换即可):
代码语言:javascript复制console.log(areDataReckon('上周')); // areDataReckon('上周') 会直接返回上周的时间段。
参考链接:Moment.js 文档 http://momentjs.cn/docs/#/use-it/