Nodejs 公历农历相互转换模块,周末整理,要的拿去

Nodejs 公历农历相互转换模块,周末整理,要的拿去

好久之前写的代码,然后整理的时候又挖了个坑,欢迎fork和star。支持Node.js和RequireJS,当然也可以不依赖任何环境。测试用例没写全,有空再写,又是一个坑。

Github

chinese-lunar

农历与公历相互转换的类库,支持农历的之间的加减运算,并提供生肖、干支等,支持1900-2100年。

Install

  1. 在node.js中用npm安装 npm install chinese-lunar
  2. 在浏览器中加载方式,<script src="../lib/chinese-lunar.js></script>
  3. chinese-lunar支持require

Usage

Node.js

var chineseLunar = require("chinese-lunar");

浏览器

window.chineseLunar是一个全局函数,直接调用就可以,例如chineseLunar.solarToLunar(new Date());

对于require,可以用如下方式使用:

require(["chinese-lunar"], function(chineseLunar){
  console.log(chineseLunar.solarToLunar(new Date());
  //more...
});

Methods

solarToLunar

solarToLunar(solar[,format]); //=> lunar or string 将公历转换为农历,如果设置了format,则返回字符形式,反之返回农历对象。 示例代码如下:

var lunar = chineseLunar.solarToLunar(new Date(1982, 0, 29));
console.log(lunar.format('YMD'));     //一九八二年腊月十六

lunarToSolar

lunarToSolar(lunar); // => solar lunarToSolar(year, month, day[,leap]); //=> solar

将农历转换为公历,leap为可选参数

format

chineseLunar.format(lunar, format); //=> 一九八二年腊月十六 可以通过返回格式化字符,format表示如下:

  • T返回传统的天干地支年份
  • A返回生肖属相
  • Y返回中文的年,如二〇一二
  • y返回英文数字的年,如2012
  • m返回中文的月份,如五
  • M返回传统的月份,如腊月和正月
  • d返回传统的天名称,如初四、十八、卅
  • D返回传统的天名称,但是如果是初一的话,会返回这个月的月份名称,例如四月初一返回的是四月而非初一

monthDiff

monthDiff(lunar1, lunar2); 返回两个农历日期之间相差多少个月

monthAdd

monthAdd(lunar, inc); 返回农历相加N个月后的新日期,与公历不同,农历可能会存在闰月的情况

dateDiff

monthDiff(lunar1, lunar2, expr); 返回两个农历日期的差值,expr可以为yMdhms任意中的一个

dateAdd

dateAdd(lunar, expr);

根据exprlunar进行相加,expr是一个表达式,格式如:/[+-]?\d+((ms)|[yMdhmsw])/,可以多个表达式叠加,其中符号+可以省略。 示例:

  • 1M-5d表示增加1个月然后再减5天
  • +5d6M-4h表示增加5天,再增加6个月,然后减去4小时

leapMonthOfYear

leapMonthOfYear(year); 判断指定年year的闰月是几月,返回0表示这一年没有闰月

monthsOfYear

monthsOfYear(year); 返回指定年的闰月是几月。

daysOfMonth

daysOfMonth(year, month, leap); 返回某年某月共有多少天,农历中每个月有多少天是不固定的。

dayName

dayName(lunar); 返回农历天的名称,例如初一。

monthName

monthName(month, traditional, leap); 返回农历月份的名称,参数traditional表示是否返回传统的月份名称,如正月和腊月。

animalName

animalName(year); 返回某年的生肖属相

yearName

yearName(year); 返回年的中文名称。

traditionalYearName

traditionalYearName(year); 返回传统天干地支名称。

Test

make test

Credits

License

The MIT License

Copyright © 2012-2013 Conis Yi <http://iove.net/>


2 回复

Nodejs 公历农历相互转换模块,周末整理,要的拿去

好久之前写的代码,然后整理的时候又挖了个坑,欢迎fork和star。支持Node.js和RequireJS,当然也可以不依赖任何环境。测试用例没写全,有空再写,又是一个坑。

GitHub: chinese-lunar

chinese-lunar

农历与公历相互转换的类库,支持农历的之间的加减运算,并提供生肖、干支等,支持1900-2100年。

安装

  1. 在Node.js中用npm安装:
    npm install chinese-lunar
    
  2. 在浏览器中加载方式:
    <script src="../lib/chinese-lunar.js"></script>
    
  3. chinese-lunar支持require

使用

Node.js
var chineseLunar = require("chinese-lunar");
浏览器

window.chineseLunar是一个全局函数,可以直接调用,例如:

console.log(chineseLunar.solarToLunar(new Date()));

对于require,可以用如下方式使用:

require(["chinese-lunar"], function(chineseLunar) {
  console.log(chineseLunar.solarToLunar(new Date()));
  // more...
});

方法

solarToLunar
solarToLunar(solar[, format]); // => lunar or string

将公历转换为农历,如果设置了format,则返回字符串形式,反之返回农历对象。

示例代码如下:

var lunar = chineseLunar.solarToLunar(new Date(1982, 0, 29));
console.log(lunar.format('YMD'));     // 一九八二年腊月十六
lunarToSolar
lunarToSolar(lunar); // => solar
lunarToSolar(year, month, day[, leap]); // => solar

将农历转换为公历,leap为可选参数。

format
chineseLunar.format(lunar, format); // => "一九八二年腊月十六"

可以通过返回格式化字符,format表示如下:

  • T 返回传统的天干地支年份
  • A 返回生肖属相
  • Y 返回中文的年,如二〇一二
  • y 返回英文数字的年,如2012
  • m 返回中文的月份,如五
  • M 返回传统的月份,如腊月和正月
  • d 返回传统的天名称,如初四、十八、卅
  • D 返回传统的天名称,但是如果是初一的话,会返回这个月的月份名称,例如四月初一返回的是四月而非初一
monthDiff
monthDiff(lunar1, lunar2);

返回两个农历日期之间相差多少个月。

monthAdd
monthAdd(lunar, inc);

返回农历相加N个月后的新日期,与公历不同,农历可能会存在闰月的情况。

dateDiff
dateDiff(lunar1, lunar2, expr);

返回两个农历日期的差值,expr可以为yMdhms任意中的一个。

dateAdd
dateAdd(lunar, expr);

根据exprlunar进行相加,expr是一个表达式,格式如:/[+-]?\d+((ms)|[yMdhmsw])/,可以多个表达式叠加,其中符号+可以省略。

示例:

  • 1M-5d 表示增加1个月然后再减5天
  • +5d6M-4h 表示增加5天,再增加6个月,然后减去4小时
leapMonthOfYear
leapMonthOfYear(year);

判断指定年year的闰月是几月,返回0表示这一年没有闰月。

monthsOfYear
monthsOfYear(year);

返回指定年的闰月是几月。

daysOfMonth
daysOfMonth(year, month, leap);

返回某年某月共有多少天,农历中每个月有多少天是不固定的。

dayName
dayName(lunar);

返回农历天的名称,例如初一。

monthName
monthName(month, traditional, leap);

返回农历月份的名称,参数traditional表示是否返回传统的月份名称,如正月和腊月。

animalName
animalName(year);

返回某年的生肖属相。

yearName
yearName(year);

返回年的中文名称。

traditionalYearName
traditionalYearName(year);

返回传统天干地支名称。

测试

make test

致谢

许可证

MIT License

版权所有 © 2012-2013 Conis Yi


Node.js 中文农历和公历相互转换的类库 chinese-lunar 提供了丰富的功能来处理农历和公历之间的转换,以及一些额外的功能如计算生肖、干支等。以下是具体的一些方法说明及示例代码:

安装

你可以通过 npm 安装该模块:

npm install chinese-lunar

使用

Node.js 示例

首先需要引入模块:

const chineseLunar = require("chinese-lunar");

然后可以使用以下方法进行转换和计算:

将公历转换为农历

let lunar = chineseLunar.solarToLunar(new Date(1982, 0, 29)); // 1982年1月29日
console.log(lunar.format('YMD'));  // 输出:一九八二年腊月十六

将农历转换为公历

let solar = chineseLunar.lunarToSolar(1982, 12, 16); // 转换为1982年12月16日的农历
console.log(solar);  // 输出:2015-02-14T00:00:00.000Z (示例输出)

计算两个农历日期之间的月份差

let lunar1 = chineseLunar.solarToLunar(new Date(1982, 0, 29));
let lunar2 = chineseLunar.solarToLunar(new Date(2020, 1, 2));
let diffMonths = chineseLunar.monthDiff(lunar1, lunar2);
console.log(diffMonths);  // 输出:217

以上是一些基本示例,更多详细信息可以参考官方文档或在 GitHub 上查看源码。

回到顶部