liaozhihong 发表于 2023-11-9 09:52:37

2023、2024年Node-RED判决是节假日、工作日函数

本帖最后由 liaozhihong 于 2023-11-9 10:49 编辑

无聊中看到看到大家在找判断是否节假日还是工作日的流,看大佬们写的太复杂了,来个简单的,最后以一个函数的形式体现出来,如果有BUG的话,希望指正。
代码如下:

// 创建一个表示当前日期和时间的对象
var now = new Date();
// 获取年份
let year = now.getFullYear();
// 获取月份(注意月份是从0开始计数的,所以需要加1)
let month = now.getMonth() + 1;
// 获取日期
let day = now.getDate();
// 格式化为 YYYY-MM-DD如2023-01-01
let formattedDate = `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')}`;

var sentence = "";

//节假日   日期用"https://timor.tech/api/holiday/year/2024"用这个连接获取
//定义2023年放假时间:前面的时间过完了,就没有添加了
var yeararr = ['2023-12-30', '2023-12-31'];

//定义2024年节假日时间:   如果是2024年了,就把上面的2023的删除了,用下面的数组就行了
/*
var yeararr = [
    '2024-01-01', '2024-02-04', '2024-02-10', '2024-02-11', '2024-02-12', '2024-02-13',
    '2024-02-14', '2024-02-15', '2024-02-16', '2024-02-17', '2024-02-18', '2024-04-04',
    '2024-04-05', '2024-04-06', '2024-04-07', '2024-04-28', '2024-05-01', '2024-05-02',
    '2024-05-03', '2024-05-04', '2024-05-05', '2024-05-11', '2024-06-08', '2024-06-09',
    '2024-06-10', '2024-09-14', '2024-09-15', '2024-09-16', '2024-09-17', '2024-09-29',
    '2024-10-01', '2024-10-02', '2024-10-03', '2024-10-04', '2024-10-05', '2024-10-06',
    '2024-10-07', '2024-10-12'];
*/

    // 判断是否为节假日
if (yeararr.indexOf(formattedDate) != -1) {
    // 如果是周末,则将"sentence"变量设置为"节假日"
    sentence = "休息日";
    // 判断是否为工作日,如果当前星期几在1到5之间(包括1和5),则为工作日
} else if (now.getDay() >= 1 && now.getDay() <= 5) {
    // 如果是周末,则将"sentence"变量设置为"工作日"
    sentence = "工作日";
    // 判断是否为周末,如果当前星期几为0或6,则为周末
} else if (now.getDay() === 0 || now.getDay() === 6) {
    // 如果是周末,则将"sentence"变量设置为"休息日"
    sentence = "休息日";
}
// 将结果存储在msg.payload对象中的speak属性中
msg.payload = { speak: sentence };
// 返回修改后的msg对象
return msg;函数输出也可以做二路输出:在后面加一个IF语句:if (sentence == "工作日") {
    return ;
} else if (sentence == "休息日") {
    return ;
}
效果为这样:

上面作为工作日,下面做为休息日要处理的事件。

,2023年过后,就使用2024年的那个数组,把2023的数组删了就行了。祝大家玩的开心
下面加上流代码:
[{"id":"cb3dab61683c7148","type":"function","z":"b0d47086b3d0620e","name":"判断是否节假日函数","func":"\n// 创建一个表示当前日期和时间的对象\nvar now = new Date();\n// 获取年份\nlet year = now.getFullYear();\n// 获取月份(注意月份是从0开始计数的,所以需要加1)\nlet month = now.getMonth() + 1;\n// 获取日期\nlet day = now.getDate();\n// 格式化为 YYYY-MM-DD如2023-01-01\nlet formattedDate = `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')}`;\n\nvar sentence = \"\";\n\n//节假日   日期用\"https://timor.tech/api/holiday/year/2024\"用这个连接获取\n//定义2023年放假时间:前面的时间过完了,就没有添加了\nvar yeararr = ['2023-12-30', '2023-12-31'];\n\n//定义2024年节假日时间:   如果是2024年了,就把上面的2023的删除了,用下面的数组就行了\n/*\nvar yeararr = [\n    '2024-01-01', '2024-02-04', '2024-02-10', '2024-02-11', '2024-02-12', '2024-02-13',\n    '2024-02-14', '2024-02-15', '2024-02-16', '2024-02-17', '2024-02-18', '2024-04-04',\n    '2024-04-05', '2024-04-06', '2024-04-07', '2024-04-28', '2024-05-01', '2024-05-02',\n    '2024-05-03', '2024-05-04', '2024-05-05', '2024-05-11', '2024-06-08', '2024-06-09',\n    '2024-06-10', '2024-09-14', '2024-09-15', '2024-09-16', '2024-09-17', '2024-09-29',\n    '2024-10-01', '2024-10-02', '2024-10-03', '2024-10-04', '2024-10-05', '2024-10-06',\n    '2024-10-07', '2024-10-12'];\n*/\n\n    // 判断是否为节假日\nif (yeararr.indexOf(formattedDate) != -1) {\n    // 如果是周末,则将\"sentence\"变量设置为\"节假日\"\n    sentence = \"休息日\";\n    // 判断是否为工作日,如果当前星期几在1到5之间(包括1和5),则为工作日\n} else if (now.getDay() >= 1 && now.getDay() <= 5) {\n    // 如果是周末,则将\"sentence\"变量设置为\"工作日\"\n    sentence = \"工作日\";\n    // 判断是否为周末,如果当前星期几为0或6,则为周末\n} else if (now.getDay() === 0 || now.getDay() === 6) {\n    // 如果是周末,则将\"sentence\"变量设置为\"休息日\"\n    sentence = \"休息日\";\n}\n// 将结果存储在msg.payload对象中的speak属性中\nmsg.payload = { speak: sentence };\n// 返回修改后的msg对象\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":400,"y":1240,"wires":[["c1c4ced5077564cf"]]},{"id":"e30ecc986f8fe5f1","type":"inject","z":"b0d47086b3d0620e","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":210,"y":1240,"wires":[["cb3dab61683c7148"]]},{"id":"c1c4ced5077564cf","type":"debug","z":"b0d47086b3d0620e","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":630,"y":1240,"wires":[]}]


a_dongde 发表于 2023-11-9 10:49:45

加上特殊日期倒计时的提醒内容该怎么加?

liaozhihong 发表于 2023-11-9 10:52:37

a_dongde 发表于 2023-11-9 10:49
加上特殊日期倒计时的提醒内容该怎么加?

我感觉做一个日期计算,计算出还有多久,再加上一个判断应该就可以了吧

dycalc 发表于 2023-11-9 12:51:16

666:loveliness:

smartws2016 发表于 2023-11-9 13:48:34

https://www.home-assistant.io/integrations/workday 直接调用HA的也方便

xzshow 发表于 2023-11-9 15:38:30

直接调用HA的也方便

缥缈的孤鸿 发表于 2023-11-9 23:32:36

https://github.com/Crazysiri/chineseholiday 在用这个

bestsort 发表于 2024-2-18 17:10:15

没考虑调休等情况, 我是用的 https://www.tianapi.com/apiview/139 这个, 每天写到input_boolean里去
页: [1]
查看完整版本: 2023、2024年Node-RED判决是节假日、工作日函数