JS时间处理(一):获取指定天、月的时间
之前遇到这么个需求:获取7天的连续时间,或者3个月的连续时间。
心想这不伸手就来,后来踩了些坑,于是把打脸时刻记录下来。
先捋一下思路,获取指定时间的前7天时间,将指定时间暂定为当天,再将今天时间转为时间戳,减去7天的时间戳,不就得到了前七天的时间了,手动狗头。
嘿嘿,理论存在,开始实践。
let dateList = []; for (let i = 0; i < 7; i++) { let time = (new Date()).getTime() - i * 24 * 60 * 60 * 1000; let tragetTime = new Date(time); let month = tragetTime.getMonth() + 1; let day = tragetTime.getDate(); tragetTime = tragetTime.getFullYear() + '-' + (month > 10 ? month : "0" + month) + '-' + (day > 9 ? day : "0" + day); dateList.unshift(tragetTime); }
于是得到了以下数据:
思路正确,继续往下。
不对啊,不是指定日期嘛,咋替换啊,new Date()是当天日期,假如指定日期是'2022-03-08',那就是new Date('2022-03-08'),即可解决问题。
接下来看月处理,3个月直接传90天?那自然不可以了,得算出3个月距离现在多少天,重复上面步骤即可得到结果。
确定3个月前是多少号,通过时间戳转换即可得到距今多少天,代码如下:
let tempDate = new Date(date); // 指定日期的时间 let tempStr = ""; // 时间转为字符串格式 // 将时间转换为3个月的标准时间 tempDate.setMonth(tempDate.getMonth() - num); // 再将标准时间转为yyyy/mm/dd字符串形式 tempStr = tempDate.toLocaleDateString();
接下来将完整代码贴在下面:
/** * @description: * 获取指定时间的上一周或者前3个月, * 为了确定当年是否为闰年,故入参为年月 * * 入参格式: "2022-03-08" * 获取上一周调用格式:getLastWeekOr3Months("2022-03-08") * 获取前3个月调用格式:getLastWeekOr3Months("2022-03-08", 3) * 出参格式:["2022-03-08", "2022-03-07", ···, "2022-03-02"] * @param: 入参:"2022-03-08" */ getLastWeekOr3Months(date, num) { let dateList = []; let dayNum = 0; if (num != undefined && typeof(num) == "number" ) { /** * 思路: * 先根据指定日期得到3个月前日期,再根据该日期得到3个月距离现在多少天 * 因为3个月不是指定就90天,故因此转换 */ let tempDate = new Date(date); // 指定日期的时间 let tempStr = ""; // 时间转为字符串格式 // 将时间转换为3个月的标准时间 tempDate.setMonth(tempDate.getMonth() - num); // 再将标准时间转为yyyy/mm/dd字符串形式 tempStr = tempDate.toLocaleDateString(); // 将指定时间的yyyy-mm-dd格式转为yyyy/mm/dd字符串形式 // 因为带-是按8点开始算,/是按0点算,会有8个小时误差 let newDate = date.replace("-", "/"); // 转换为时间戳,比较中间相差天数 let diffDate = new Date(newDate).getTime() - new Date(tempStr).getTime(); dayNum = diffDate / 86400000; } else { dayNum = 7; } for (let i = 0; i < dayNum; i++) { let time = (new Date(date)).getTime() - i * 24 * 60 * 60 * 1000; let tragetTime = new Date(time); let month = tragetTime.getMonth() + 1; let day = tragetTime.getDate(); tragetTime = tragetTime.getFullYear() + '-' + (month > 10 ? month : "0" + month) + '-' + (day > 9 ? day : "0" + day); dateList.unshift(tragetTime); } console.log('util/dateHandle.js获取一周或者3月时间', dateList); return dateList; }
以上就是本篇的全部内容,要是有什么错误的地方,欢迎小伙伴指出来,要是觉得不错的话,点赞支持一下哈。