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
加上特殊日期倒计时的提醒内容该怎么加?
我感觉做一个日期计算,计算出还有多久,再加上一个判断应该就可以了吧 666:loveliness: https://www.home-assistant.io/integrations/workday 直接调用HA的也方便 直接调用HA的也方便 https://github.com/Crazysiri/chineseholiday 在用这个 没考虑调休等情况, 我是用的 https://www.tianapi.com/apiview/139 这个, 每天写到input_boolean里去
页:
[1]