├── .gitignore ├── .spmignore ├── HISTORY.md ├── README.md ├── examples └── index.md ├── index.js ├── package.json ├── shu.js └── tests ├── index-spec.js └── shu-spec.js /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | _site/ 3 | spm_modules/ 4 | -------------------------------------------------------------------------------- /.spmignore: -------------------------------------------------------------------------------- 1 | dist 2 | _site 3 | sea-modules 4 | spm_modules 5 | node_modules 6 | .git 7 | tests 8 | examples 9 | test 10 | -------------------------------------------------------------------------------- /HISTORY.md: -------------------------------------------------------------------------------- 1 | # History 2 | 3 | --- 4 | 5 | ## 0.0.0 6 | 7 | `new` It is the first version of nong. 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # nong [![spm version](http://spmjs.io/badge/nong)](http://spmjs.io/package/nong) 2 | 3 | --- 4 | 5 | 农历日期(Nong Li Date) 6 | 7 | ## INSTALL 8 | 9 | ``` 10 | $ spm install nong --save 11 | ``` 12 | 13 | ## USAGE 14 | 15 | ```js 16 | var Nong = require('nong'); 17 | var nongli_from_gongli = new Nong(new Date()); // 今天所对应的农历日期。 18 | var nongli_from_dt = new Nong(1983, 1, 1); // 农历一九八三年正月初一日。 19 | var nongli_from_zh = new Nong("1983-01-01"); // 农历一九八三年正月初一日。 20 | var nongli_from_zh = new Nong("1983/01/01"); // 农历一九八三年正月初一日。 21 | var nongli_from_zh = new Nong("一九八三年正月初一"); // 农历一九八三年正月初一日。 22 | var nongli_from_zh = new Nong("二〇〇九年闰五月初一"); // 农历二〇〇九年闰五月初一日。 23 | ``` 24 | 25 | ## API 26 | 27 | ### Nong() 28 | 29 | 现在的农历日。 30 | 31 | ### Nong(Date date) 32 | 33 | 通过公历生成农历日。 34 | 35 | ### Nong(Number year, Number month, Number date, leap) 36 | 37 | 通过指定农历日期生成农历日。 38 | 39 | ### Nong(String nong) 40 | 41 | 通过农历字符串生成农历日。 42 | 43 | ### Number nong.getYear() 44 | 45 | 返回农历日的年份。 46 | 47 | ### Number nong.getFullYear() 48 | 49 | 同 `nong.getYear()`。 50 | 51 | ### Number nong.getMonth() 52 | 53 | 返回农历日的月份,`[0,11]`。 54 | 55 | ### Number nong.getDate() 56 | 57 | 返回农历日的日期,`[1,30]`。 58 | 59 | ### Boolean nong.isLeap() 60 | 61 | 返回当前农历日是否属于闰月。 62 | 63 | ### Number nong.getDay() 64 | 65 | 返回农历日的星期数,`[0,6]`。 66 | 67 | ### String nong.getHours() 68 | 69 | 返回农历日的小时,`子丑寅卯辰巳午未申酉戌亥`。 70 | 71 | ### String nong.getMinutes() 72 | 73 | 返回农历日的分钟数。 74 | 75 | ### String nong.getSeconds() 76 | 77 | ### String.getMilllseconds() 78 | 79 | ### Number getTime() 80 | 81 | 返回农历日距计算机元年(1970年 1月 1日)的毫秒数。 82 | 83 | ### Number Nong.parse(String nong) 84 | 85 | 解析一个农历字符串,并返回该农历日距计算机元年(1970年 1月 1日)的毫秒数。 86 | 87 | ### nong.setYear(Number year) 88 | 89 | 设置农历日的年份。 90 | 91 | ### nong.setFullYear(Number nong) 92 | 93 | 同 `nong.setYear()` 94 | 95 | ### nong.setMonth(Number month) 96 | 97 | 设置农历日的月份。 98 | 99 | ### nong.setDate(Number date) 100 | 101 | 设置农历日的日期。 102 | 103 | ### nong.setHours() 104 | 105 | 设置农历日的时间。 106 | 107 | ### nong.setMinutes() 108 | 109 | 设置农历日的分钟。 110 | 111 | ### nong.setSeconds() 112 | 113 | 设置农历日的秒数。 114 | 115 | ### nong.setMilliseconds() 116 | 117 | 设置农历日的毫秒数。 118 | 119 | ### nong.toString([String format]) 120 | 121 | 生成农历日的格式化字符串。 122 | 123 | ### nong.valueOf() 124 | 125 | 得到农历日的距离计算机元年的毫秒数。 126 | -------------------------------------------------------------------------------- /examples/index.md: -------------------------------------------------------------------------------- 1 | # Demo 2 | 3 | --- 4 | 5 | ## Normal usage 6 | 7 | ````javascript 8 | seajs.use('index', function(nong) { 9 | 10 | }); 11 | ```` 12 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | 2 | var shu = require("./shu"); 3 | 4 | var TIAN_GAN = "甲乙丙丁戊己庚辛壬癸"; 5 | var DI_ZHI = "甲乙丙丁戊己庚辛壬癸"; 6 | var WEEKS = "日一二三四五六"; 7 | var SHU_XIANG = "鼠牛虎兔龙蛇马羊猴鸡狗猪"; 8 | 9 | function Nong(){ 10 | } 11 | 12 | 13 | module.exports = Nong; 14 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nong", 3 | "version": "0.1.0", 4 | "description": "农历日期(Nong Li Date)", 5 | "keywords": ["农历", "Lunar", "Calendar", "Nong", "NongLi", "Nong Li"], 6 | "homepage": "https://github.com/hotoo/nong", 7 | "author": "闲耘 ", 8 | "repository": { 9 | "type": "git", 10 | "url": "https://github.com/hotoo/nong.git" 11 | }, 12 | "bugs": { 13 | "url": "https://github.com/hotoo/nong/issues" 14 | }, 15 | "main": "index.js", 16 | "spm": { 17 | "main": "index.js", 18 | "devDependencies": { 19 | "expect.js": "0.3.1" 20 | }, 21 | "engines": { 22 | "seajs": "2.3.0" 23 | } 24 | }, 25 | "licenses": "MIT" 26 | } 27 | -------------------------------------------------------------------------------- /shu.js: -------------------------------------------------------------------------------- 1 | 2 | var NUMBERS = "〇一二三四五六七八九十"; 3 | var DATES = "初十廿卅"; 4 | var MONTHS = "正二三四五六七八九十冬腊"; 5 | 6 | function number2year (number) { 7 | var n = String(number); 8 | return n.replace(/(\d)/g, function($0, $1){ 9 | return NUMBERS.charAt( parseInt($1, 10) ); 10 | }); 11 | } 12 | 13 | 14 | function number2month (number) { 15 | return MONTHS.charAt( number ); 16 | } 17 | 18 | 19 | function number2date (number){ 20 | switch (number) { 21 | case 10: 22 | return "初十"; 23 | case 20: 24 | return "二十"; 25 | case 30: 26 | return "三十"; 27 | default: 28 | return DATES.charAt( Math.floor( (number - 1) / 10 ) ) + 29 | NUMBERS.charAt( (number - 1) % 10 + 1 ); 30 | } 31 | } 32 | 33 | 34 | // 农历年份转成数值。 35 | // @param {String} year 36 | // @return {Number} 37 | var RE_ZH_YEAR = new RegExp('([' + NUMBERS + '])', "g"); 38 | function year2number(year) { 39 | return Number( 40 | year 41 | .replace(/年$/, "") 42 | .replace(RE_ZH_YEAR, function($0, $1){ 43 | return NUMBERS.indexOf($1); 44 | }) 45 | ); 46 | } 47 | 48 | 49 | // 农历月份转数值。 50 | // @param {String} month 农历月份。 51 | // @return {Number} 52 | function month2number(month) { 53 | return MONTHS.indexOf( month.replace(/月$/, "")); 54 | } 55 | 56 | 57 | // 农历日期转成数值。 58 | // @param {String} date, 农历日期。 59 | // @return {Number} 60 | function date2number(date){ 61 | date = date.replace(/日$/, "") 62 | .replace(/^初/, ""); 63 | 64 | switch (date) { 65 | case "十": 66 | return 10; 67 | case "二十": 68 | return 20; 69 | case "三十": 70 | return 30; 71 | default: 72 | var number = 0; 73 | 74 | for(var i=0,l=date.length; i= 0) { 78 | number += 10 * DATES.indexOf(s) 79 | } else { 80 | number += NUMBERS.indexOf(s); 81 | } 82 | } 83 | return number; 84 | } 85 | } 86 | 87 | 88 | module.exports = { 89 | year2number: year2number, 90 | month2number: month2number, 91 | date2number: date2number, 92 | number2year: number2year, 93 | number2month: number2month, 94 | number2date: number2date 95 | }; 96 | -------------------------------------------------------------------------------- /tests/index-spec.js: -------------------------------------------------------------------------------- 1 | var expect = require('expect.js'); 2 | var nong = require('../index'); 3 | 4 | describe('nong', function() { 5 | 6 | it('normal usage', function() { 7 | 8 | }); 9 | 10 | }); 11 | -------------------------------------------------------------------------------- /tests/shu-spec.js: -------------------------------------------------------------------------------- 1 | 2 | var expect = require("expect.js"); 3 | var shu = require('../shu'); 4 | 5 | describe('数(shu)', function() { 6 | 7 | it('数值日期转农历日期', function() { 8 | var MONTHS = [ 9 | [1, "初一"], 10 | [9, "初九"], 11 | [10, "初十"], 12 | [11, "十一"], 13 | [19, "十九"], 14 | [20, "二十"], 15 | [21, "廿一"], 16 | [29, "廿九"], 17 | [30, "三十"], 18 | [31, "卅一"] 19 | ]; 20 | for(var i=0,l=MONTHS.length; i