javascript - 用Javascript计算假期
问题描述
作为学习练习,我在这里提出了问题:用Javascript计算假期,并通过建议的方法,自己开发了一个使用 ES6 数组方法的解决方案。
上面链接的上一个堆栈帖子建议了一种对象方法,但答案不包含任何代码。我决定使用数组方法,并提供一个完整的编码示例。具有 8K 视图的旧帖子没有提供数组方法,并且 OP 已经有了答案,所以我创建了一个新问题并进行了自我回答。
我还在学习中,所以我请专业人士对此进行改进!我进行了一些性能测试,if/then 方法更快,但这段代码有效。同样如您所见,我无法链接 .findIndex(),但这只会导致另一个变量和另一行代码。需要注意的是,旧版浏览器不支持某些 ES6 数组方法。
无论如何,我希望这会有所帮助。
解决方案
function check_holiday4(ds) {
const [m, d, y] = ds.split('/');
const h = [ // keys are formatted as month,week,day
["0,1", "New Year's Day"],
["0,3,1", "Martin Luther King, Jr. Day"],
["0,20", (function() {
if (((y - 1937) % 4) == 0) return 'Inauguration Day'
})()],
["1,14", "Valentine's Day"],
["1,3,1", "President's Day"],
["2,2,0", "Daylight Savings Time Begins"],
["3,3,3", "Administrative Professionals Day"],
["4,2,0", "Mother's Day"],
["4,5,1", "Memorial Day"],
["5,14", "Flag Day"],
["5,3,0", "Father's Day"],
["5,3,6", "Armed Forces Day"],
["6,4", "Independence Day"],
["6,4,0", "Parents Day"],
["8,1,1", "Labor Day"],
["9,2,1", "Columbus Day"],
["9,31", "Halloween"],
["10,11", "Veterans Day"],
["10,1,0", "Daylight Savings Time Ends"],
["10,1,2", "Election Day"],
["10,4,4", "Thanksgiving Day"],
["11,25", "Christmas Day"]
];
const f = (a, n, d) => (d + 6 - new Date(...a, 7).getDay()) % 7 + n * 7 - 6;
const dim = (y, m) => new Date(y, m + 1, 0).getDate();
const hc = (y, m) => h.filter(v => v[0].startsWith(m)).map((val, i) => {
const [vm, vn, vdw] = val[0].split(',');
let cd = f([y, vm], vn, +vdw);
cd = (cd > dim(y, vm)) ? cd - 7 : (val[0].split(',').length === 2) ? vn : cd;
val[0] = (+vm + 1) + "/" + cd + "/" + y;
return [val[0], val[1]];
});
const ha = hc(y, m - 1);
return ha[ha.findIndex(sa => sa[0] === ds)][1];
}
console.log(check_holiday4(new Date("10/31/2019").toLocaleDateString()));
// "Halloween"
console.log(check_holiday4(new Date("5/31/2021").toLocaleDateString()));
// "Memorial Day"
推荐阅读
- android - 如何将变量从 observable 返回到另一个 observable 类型
- postgresql - Postgres EXPLAIN BUFFERS 查询的总缓冲区计数
- php - 打开excel导出文件时出现PHP SYMFONY问题
- python - 无法使用 python manage.py runserver 运行 Django 项目
- swift - Swift UI - ReferencerTester.swift 文件。尝试附加到数组时收到错误
- azure - 如何从 azure build pipeline(CI)中的预定义变量获取拉取请求编号
- python - 使用 pip install 并行构建 C Python 模块
- html - 单击不同元素时如何在 HTML 中启用复选框?
- python - Django比较模板中的日期字段
- c - fscanf 并不总是提前指针