JavaScript 获取日期范围
例如起始时间是 2021/02/01
获取下个月的日期, 结果应为 2022/02/01
.
代码描述:
const date = new Date("2021/02/01");
date.setMonth(date.getMonth() + 1);
又如, 根据当前时间想获取下一年零两个月五天七时八分九秒的区间日期呢?
直接操作 Date
类那简直是天灾!
工具函数:
/**
* 获取日期范围
* @param date {Date}
* @param rule {String} [年(y)|月(M)|日(d)|时(h)|分(m)|秒(s)|毫秒(S)]
* @param direction {Number} [-1|1]
* @returns {Date}
* @exmaple
* getDateRange(Date.now(), "1y2M3d4h5m6s7S");
*/
function getDateRange(date, rule, direction = 1) {
const startDate = new Date(date);
const endDate = new Date(startDate);
const o = {
y: "FullYear",
M: "Month",
d: "Date",
h: "Hours",
m: "Minutes",
s: "Seconds",
S: "Milliseconds"
};
for (const key in o) {
const reg = new RegExp(`([0-9]+)${key}`);
const method = o[key];
if (reg.test(rule)) {
const match = rule.match(reg);
const num = match[1] >> 0;
const matchStr = match[0];
rule = rule.replace(matchStr, "");
endDate[`set${method}`](endDate[`get${method}`]() + num * direction);
}
}
return endDate;
}
使用示例
const date = new Date("2021/03/01 10:10:10:100");
// 向后获取范围
getDateRange(date, "1y", 1); // (format) => "2022/03/01 10:10:10:100"
// 向前获取范围
getDateRange(date, "1y", -1); // (format) => "2020/03/01 10:10:10:100"
// 全部规则 [年(y)|月(M)|日(d)|时(h)|分(m)|秒(s)|毫秒(S)],默认向后获取
getDateRange(date, "1y"); // (format) => "2022/03/01 10:10:10:100"
getDateRange(date, "1M"); // (format) => "2021/04/01 10:10:10:100"
getDateRange(date, "1d"); // (format) => "2021/03/02 10:10:10:100"
getDateRange(date, "1h"); // (format) => "2021/03/01 11:10:10:100"
getDateRange(date, "1m"); // (format) => "2021/03/01 10:11:10:100"
getDateRange(date, "1s"); // (format) => "2021/03/01 10:10:11:100"
getDateRange(date, "1S"); // (format) => "2021/03/01 10:10:10:101"
// 组合规则
getDateRange(date, "1y2M3d4h5m6s7S"); // (format) => "2022/05/04 14:15:16:107"
相关类库
- 成熟的日期处理类库 Moment.js
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!