JavaScript实现公历转农历功能示例

为了实现将公历转为农历的功能,我们可以使用 JavaScript 。下面是一些实现方法:

获取农历年份其中天干地支年份和生肖的方法

根据中国传统农历的节气来把年份换算成对应的天干地支年份和生肖。下面是一种计算天干地支的方法:

// 获取生肖年份的方法
function zodiacYear(solarYear) {
    var animals = [ "鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪" ];
    return animals[solarYear % 12];
}

// 获取天干地支年份的方法
function cyclicalYear(solarYear) {
    var baseYear = 1900;
    var baseMonth = 0;
    var baseDay = 31;
    var termDiff = function(y, i){
        var sTerm = new Date(1900, (i * 2 + baseMonth) % 24, baseDay);
        var solar = new Date(y, i, 1);
        return (solar.getTime() - sTerm.getTime()) / (1000 * 60 * 60 * 24);
    };
    var termMap = [
        termDiff(solarYear, 0),  termDiff(solarYear, 2),  termDiff(solarYear, 4),  termDiff(solarYear, 6),
        termDiff(solarYear, 8),  termDiff(solarYear, 10), termDiff(solarYear, 12), termDiff(solarYear, 14),
        termDiff(solarYear, 16), termDiff(solarYear, 18), termDiff(solarYear, 20), termDiff(solarYear, 22),
    ];
    var gan = [ "甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸" ];
    var zhi = [ "子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥" ];
    return gan[solarYear % 10] + zhi[solarYear % 12] + "(" + zodiacYear(solarYear) + "年)";
}

获取每月的天数的方法

农历月份的天数是有所不同的,因此我们需要一个函数来获取对应的天数。下面是一个实现方法:

// 获取农历每个月的天数,month是农历月份,year是农历年份        
function daysInMonth(month, year) {
    var leap = leapMonth(year);
    var isLeap = false;

    for (var i = 1; i < 13 && month > 0; i++) {
        if (leap > 0 && i == (leap + 1) && isLeap == false) {
            --i;
            isLeap = true;
        } else {
            var temp = monthDays(year, i);
            ret += temp;
            if (isLeap == true) {
                isLeap = false;
            }
        }
    }
    return ret;
}

// 获取农历 of leap month的信息
function leapMonth(year) {
    return lunarInfo[year - 1900] & 0xf;
}

// 获取农历的总天数
function lunarYearDays(year) {
    var i, f, sumDay, info = lunarInfo[year - 1900];
    sumDay = 348;
    for (i = 0x8000; i > 0x8; i >>= 1) {
        sumDay += (info & i) ? 1 : 0;
    }
    return sumDay + leapMonthDays(year); // 夏月是有可能跨两个月的
}

// 获取农历的每个月的天数信息
function monthDays(year, month) {
    return (lunarInfo[year - 1900] & (0x10000 >> month)) ? 30 : 29;
}

这里解释一下函数中用到的变量:

  • lunarInfo 是一个包含从1900到2100年间每年这一时刻的农历月份与闰月等数据的数组(国历年个月份对应的农历信息与1918年相同)
  • leapMonthDays 是检查该年有没有特别的闰月(夏月)

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript实现公历转农历功能示例 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • JavaScript Math.floor方法(对数值向下取整)

    JavaScript Math.floor方法 Math.floor() 方法会返回小于等于所传参数的最大整数。 语法 Math.floor(x) 参数 x:必需。一个数值,将被下舍入为整数。 返回值 返回小于等于 x 的最大整数。 示例1:向下取整 var a = Math.floor(4.3); // 4 var b = Math.floor(9.999…

    JavaScript 2023年5月28日
    00
  • javascript下判断一个对象是否具有指定名称的属性的的代码

    要判断一个 JavaScript 对象是否具有指定名称的属性,可以使用 in 或者 hasOwnProperty() 方法。 使用 in 关键字进行属性判断 in 关键字可以用于判断一个对象是否具有指定名称的属性,返回布尔值 true 或 false。 const person = { name: ‘张三’, age: 20 }; // 判断对象是否具有指定…

    JavaScript 2023年5月27日
    00
  • 浅谈React Router关于history的那些事

    浅谈React Router关于history的那些事 React Router是React中最流行的路由库之一,用于在React应用程序中管理不同URL之间的转换。其中一个重要的概念是history,它是实际实现路由的技术基础。本文将重点讲解React Router中关于history的那些事。 history是什么 首先,我们需要了解什么是history…

    JavaScript 2023年6月11日
    00
  • JS动态生成年份和月份实例代码

    下面我将为你详细讲解JS动态生成年份和月份实例代码的完整攻略。 1. 使用方法说明 该代码实现的功能是通过JS生成一个下拉框,用于选择年份和月份。在使用该代码前,需要将以下代码拷贝到你的HTML文件中: <!– 引入jquery –> <script src="https://cdn.bootcdn.net/ajax/libs…

    JavaScript 2023年5月27日
    00
  • javascript实现unicode和字符的互相转换

    javascript实现unicode和字符的互相转换是一个比较常见的需求,下面是一些常见实现方式: 使用charCodeAt()方法将字符转换成unicode JavaScript中有一个内置方法叫做charCodeAt(),可以返回指定位置的字符的Unicode值。使用该方法,可以将字符转换成对应的Unicode值。 下面是一个将字符串中的每个字符转换成…

    JavaScript 2023年5月19日
    00
  • js简单实现自动生成表格功能示例

    下面我详细讲解“js简单实现自动生成表格功能”的完整攻略。 思路分析 在实现自动生成表格的功能之前,我们需要考虑以下几个问题: 在什么情况下需要自动生成表格? 在很多情况下,我们需要将一些数据展示在网页上,同时这些数据可能十分庞大,用表格的形式展示更加直观且易于阅读。 自动生成表格需要哪些数据? 自动生成表格需要一个二维数组,表示表格中的每一个单元格的内容。…

    JavaScript 2023年5月28日
    00
  • JavaScript中获取HTML元素值的三种方法

    当我们在编写 JavaScript 代码时,常常需要获取 HTML 元素的值。下面介绍三种常见的方法来获取 HTML 元素的值。 1. 使用 document.getElementById() 方法 document.getElementById() 方法是用来获取指定 id 的元素的,然后我们可以使用 value 属性获取元素的值。示例代码如下: // H…

    JavaScript 2023年6月10日
    00
  • 详解JavaScript实现简单的词法分析器示例

    下面是详解“详解JavaScript实现简单的词法分析器示例”的完整攻略: 一、词法分析器概述 词法分析器是编译器中最简单的部分之一,它的主要功能是将代码分解为有意义的词法单元,例如关键字、标识符、常量、操作符等。在构建词法分析器时,我们可以使用许多工具和技术,例如正则表达式、自动机、递归下降解析器等。 二、实现一个简单的词法分析器 下面我们将介绍如何使用J…

    JavaScript 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部