前端判断节假日的详细代码举例

 更新时间:2024年08月02日 08:26:00   作者:zh q  
因为要做一个日历控件,遇到国家法定节假日,怎么实现此功能呢?这篇文章主要给大家介绍了关于前端判断节假日的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

安装并引入 

第一种:
npm i chinese-days

import chineseDays from 'chinese-days'

第二种:
直接浏览器引入,会跟随国务院发布更新
<script src="https://cdn.jsdelivr.net/npm/chinese-days/dist/index.min.js"></script>
<script>
  const { isHoliday } = chineseDays
  console.log(isHoliday('2022-01-01'))
</script>

直接调用

isWorkday 检查某个日期是否为工作日 console.log(isWorkday('2024-01-01')); // false
isHoliday 检查某个日期是否为节假日 console.log(isHoliday('2024-01-01')); // true

isInLieu 检查某个日期是否为调休日

getDayDetail 检查指定日期是否是工作日
// 示例用法
如果指定日期是工作日,则返回 true 和工作日名称,如果是被调休的工作日,
返回 true 和节假日详情。如果是节假日,则返回 false 和节假日详情。
// 正常工作日 周五
console.log(getDayDetail('2024-02-02')); // { "date": "2024-02-02", "work":true,"name":"Friday"}
// 节假日 周末
console.log(getDayDetail('2024-02-03')); // { "date": "2024-02-03", "work":false,"name":"Saturday"}
// 调休需要上班
console.log(getDayDetail('2024-02-04')); // { "date": "2024-02-04", "work":true,"name":"Spring Festival,春节,3"}
// 节假日 春节
console.log(getDayDetail('2024-02-17')); // { "date": "2024-02-17", "work":false,"name":"Spring Festival,春节,3"}

获取指定日期范围内的所有节假日

getHolidaysInRange 获取指定日期范围内的所有节假日

接收起始日期和结束日期,并可选地决定是否包括周末。
如果包括周末,则函数会返回包括周末在内的所有节假日;否则,只返回工作日的节假日。
即使不包括周末,周末的节假日仍然会被返回
// 示例用法
const start = '2024-04-26';
const end = '2024-05-06';

// 获取从 2024-05-01 到 2024-05-10 的所有节假日,包括周末
const holidaysIncludingWeekends = getHolidaysInRange(start, end, true);
console.log('Holidays including weekends:', holidaysIncludingWeekends.map(d => getDayDetail(d)));

// 获取从 2024-05-01 到 2024-05-10 的节假日,不包括周末
const holidaysExcludingWeekends = getHolidaysInRange(start, end, false);
console.log('Holidays excluding weekends:', holidaysExcludingWeekends.map(d => getDayDetail(d)));

取指定日期范围内的工作日列表

接收起始日期和结束日期,并可选地决定是否包括周末。如果包括周末,则函数会返回包括周末在内的所有工作日;否则,只返回周一到周五的工作日。
// 示例用法
const start = '2024-04-26';
const end = '2024-05-06';

// 获取从 2024-05-01 到 2024-05-10 的所有工作日,包括周末
const workdaysIncludingWeekends = getWorkdaysInRange(start, end, true);
console.log('Workdays including weekends:', workdaysIncludingWeekends);

// 获取从 2024-05-01 到 2024-05-10 的工作日,不包括周末
const workdaysExcludingWeekends = getWorkdaysInRange(start, end, false);
console.log('Workdays excluding weekends:', workdaysExcludingWeekends);

查找工作日

查找从今天开始 未来的第 {deltaDays} 个工作日。

// 查找从今天开始 未来的第 {deltaDays} 个工作日
// 如果 deltaDays 为 0,首先检查当前日期是否为工作日。如果是,则直接返回当前日期。
// 如果当前日期不是工作日,会查找下一个工作日。
const currentWorkday = findWorkday(0);
console.log(currentWorkday);

// 查找从今天开始未来的第一个工作日
const nextWorkday = findWorkday(1);
console.log(nextWorkday);

// 查找从今天开始之前的前一个工作日
const previousWorkday = findWorkday(-1);
console.log(previousWorkday);

// 可以传第二个参数 查找具体日期的上下工作日
// 查找从 2024-05-18 开始,未来的第二个工作日
const secondNextWorkday = findWorkday(2, '2024-05-18');
console.log(secondNextWorkday);

获取 24 节气的日期

import { getSolarTerms } from "chinese-days";

/** 获取范围内 节气日期数组 */
const solarTerms = getSolarTerms("2024-05-01", "2024-05-20");
solarTerms.forEach(({ date, term, name }) => {
  console.log(`${name}: ${date}, ${term}`);
});
// 立夏: 2024-05-05, the_beginning_of_summer
// 小满: 2024-05-20, lesser_fullness_of_grain

// 没有节气 返回 []
getSolarTerms("2024-05-21", "2024-05-25");
// return []

/* 不传 end 参数, 获取某天 节气 */
getSolarTerms("2024-05-20");
// return: [{date: '2024-05-20', term: 'lesser_fullness_of_grain', name: '小满'}]

阳历转换农历

// 2097-8-7
console.log(getLunarDate('2097-08-07'))

// 2057-9-28
console.log(getLunarDate('2057-09-28'))
// {
//   date: "2057-09-28",
//   lunarYear: 2057,
//   lunarMon: 8,
//   lunarDay: 30,
//   isLeap: false,
//   lunarDayCN: "三十",
//   lunarMonCN: "八月",
//   lunarYearCN: "二零五七",
//   yearCyl: "丁丑",
//   monCyl: "己酉",
//   dayCyl: "戊子",
//   zodiac: "牛"
// }

// 非闰月 和 闰月例子
console.log(getLunarDate('2001-04-27'))
console.log(getLunarDate('2001-05-27'))

根据阳历日期区间,批量获取农历日期

console.log(getLunarDatesInRange('2001-05-21', '2001-05-26'))

农历转换阳历

当为阴历闰月的时候,会出现一个农历日期对应两个阳历日期的情况,所以返回对象形式。
console.log(getSolarDateFromLunar('2001-03-05'))
// {date: '2001-03-29', leapMonthDate: undefined}

console.log(getSolarDateFromLunar('2001-04-05'))
// {date: '2001-04-27', leapMonthDate: '2001-05-27'}

总结

到此这篇关于前端判断节假日的文章就介绍到这了,更多相关前端判断节假日内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • js原生方法被覆盖,从新赋值原生的方法

    js原生方法被覆盖,从新赋值原生的方法

    下面小编就为大家分享一篇js原生方法被覆盖,从新赋值原生的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • JavaScript代码里的判断小结

    JavaScript代码里的判断小结

    在JavaScript代码中,多多少少会有判断语句。业务越复杂,逻辑就越复杂,判断就越多。今天给大家整理下JavaScript中代码里常会用到的那些判断,有需要的可以参考借鉴。
    2016-08-08
  • 一文详解如何将Javascript打包成exe可执行文件

    一文详解如何将Javascript打包成exe可执行文件

    这篇文章主要介绍了将Javascript打包成exe可执行文件的相关资料,这种方法适用于需要将JavaScript项目打包成单个独立运行的可执行文件的开发者,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-04-04
  • arcgis for js 修改infowindow样式的方法

    arcgis for js 修改infowindow样式的方法

    下面小编就为大家带来一篇arcgis for js 修改infowindow样式的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • JavaScript算法题之如何将一个数组旋转k步

    JavaScript算法题之如何将一个数组旋转k步

    这篇文章主要给大家介绍了关于JavaScript算法题之如何将一个数组旋转k步的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-03-03
  • 详谈JavaScript内存泄漏

    详谈JavaScript内存泄漏

    文章从什么是闭包、以及闭包所涉及的作用域链说起,讲述了JavaScript垃圾回收机制、循环引用、循环引用和闭包、IE中的内存泄漏以及解决方法,是篇非常详尽,非常不错的文章,这里推荐给大家。
    2014-11-11
  • JavaScript中关于e.keycode的使用

    JavaScript中关于e.keycode的使用

    这篇文章主要介绍了JavaScript中关于e.keycode的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • JavaScript判断元素是否在可视区域的三种方法

    JavaScript判断元素是否在可视区域的三种方法

    这这篇文章给大家总结了JavaScript判断元素是否在可视区域的三种方法,getBoundingClientRect,IntersectionObserver和offsetTop、scrollTop这三种方法,文中通过代码示例给大家介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • 前端大屏自适应两种实现方法总结

    前端大屏自适应两种实现方法总结

    这篇文章主要介绍了前端大屏自适应两种实现方法,缩放方法会影响地图等库的交互效果,而vh、vw、百分比等方法只适用于高度变化,宽度变化时可能需要结合计算属性来处理,但总体上适配效果较好,需要的朋友可以参考下
    2025-01-01
  • 将URL地址都变成ooooooooo的神奇小工具使用介绍

    将URL地址都变成ooooooooo的神奇小工具使用介绍

    这篇文章主要为大家介绍了将URL地址都变成ooooooooo的神奇小工具使用介绍,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04

最新评论