From 7d305771a977780010b04f00a69d2bded506d8f0 Mon Sep 17 00:00:00 2001 From: 6tail <6tail@6tail.cn> Date: Wed, 6 Oct 2021 21:48:37 +0800 Subject: [PATCH] =?UTF-8?q?v1.2.7=20=E4=BF=AE=E5=A4=8D=E6=97=B6=E5=8C=BA?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E8=AE=A1=E7=AE=97=E9=94=99=E8=AF=AF=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __tests__/EightChar.test.js | 1 - __tests__/Lunar.test.js | 12 +++++++++++- lunar.js | 35 +++++++++++++++++++++-------------- package.json | 5 +++-- 4 files changed, 35 insertions(+), 18 deletions(-) diff --git a/__tests__/EightChar.test.js b/__tests__/EightChar.test.js index a903a73..d92224f 100644 --- a/__tests__/EightChar.test.js +++ b/__tests__/EightChar.test.js @@ -147,4 +147,3 @@ test('身宫', () => { const eightChar = lunar.getEightChar(); expect(eightChar.getShenGong()).toBe('壬午'); }); - diff --git a/__tests__/Lunar.test.js b/__tests__/Lunar.test.js index a5343ce..120e84b 100644 --- a/__tests__/Lunar.test.js +++ b/__tests__/Lunar.test.js @@ -1,4 +1,4 @@ -var {Solar, Lunar} = require('../lunar'); +var {Solar, Lunar, LunarYear} = require('../lunar'); test('干支', () => { let solar = Solar.fromYmdHms(2020, 1, 1, 13, 22, 0); @@ -530,3 +530,13 @@ test('test044', () => { const solar = Solar.fromYmd(1, 1, 1); expect(solar.getLunar().getYearShengXiao()).toBe('猴'); }); + +test('test045', () => { + const lunarMonth = LunarYear.fromYear(2020).getMonth(-4); + expect(lunarMonth.toString()).toBe('2020年闰四月(29)天'); +}); + +test('test046', () => { + const solar = Solar.fromYmdHms(2000, 1, 1, 16, 0, 0); + expect(solar.getLunar().getHour()).toBe(16); +}); diff --git a/lunar.js b/lunar.js index 9f68bc3..e137e33 100644 --- a/lunar.js +++ b/lunar.js @@ -22,10 +22,10 @@ return date; }, fromYmd:function(y,m,d){ - return this._(new Date(y+'/'+m+'/'+d+' 0:0:0 GMT+0800'),y,m,d); + return this.fromYmdHms(y,m,d,0,0,0); }, fromYmdHms:function(y,m,d,hour,minute,second){ - return this._(new Date(y+'/'+m+'/'+d+' '+hour+':'+minute+':'+second+' GMT+0800'),y,m,d); + return this._(new Date(y+'/'+m+'/'+d+' '+hour+':'+minute+':'+second),y,m,d); } }; })(); @@ -68,7 +68,7 @@ return _fromYmdHms(year,month,day,hour,minute,second); }; var _fromYmdHms = function(y,m,d,hour,minute,second){ - if(y===1582&&m==10){ + if(y===1582&&m===10){ if(d>=15){ d -= 10; } @@ -174,7 +174,7 @@ }, toYmd:function(){ var d = this._p.day; - if(this._p.year===1582&&this._p.month==10){ + if(this._p.year===1582&&this._p.month===10){ if(d>=5){ d += 10; } @@ -335,7 +335,15 @@ }; })(); var Lunar = (function(){ - var MS_PER_DAY = 86400000; + var _diff = function(after, before) { + var current = ExactDate.fromYmdHms(before.getFullYear(), before.getMonth()+1, before.getDate(), before.getHours(), before.getMinutes(), before.getSeconds()); + var n = 0; + while(current= endCalendar) { return null; } - var days = Math.floor((currentCalendar.getTime() - startCalendar.getTime()) / MS_PER_DAY); + var days = _diff(currentCalendar,startCalendar); return this._buildNameAndIndex(LunarUtil.NUMBER[Math.floor(days / 9) + 1] + '九', days % 9 + 1); }, getFu:function(){ @@ -1399,7 +1406,7 @@ return null; } - var days = Math.floor((currentCalendar.getTime() - startCalendar.getTime()) / MS_PER_DAY); + var days = _diff(currentCalendar,startCalendar); if (days < 10) { return this._buildNameAndIndex('初伏', days + 1); } @@ -1407,7 +1414,7 @@ // 第4个庚日,中伏第1天 startCalendar.setDate(startCalendar.getDate() + 10); - days = Math.floor((currentCalendar.getTime() - startCalendar.getTime()) / MS_PER_DAY); + days = _diff(currentCalendar,startCalendar); if (days < 10) { return this._buildNameAndIndex('中伏', days + 1); } @@ -1417,7 +1424,7 @@ var liQiuCalendar = ExactDate.fromYmd(liQiu.getYear(),liQiu.getMonth(),liQiu.getDay()); - days = Math.floor((currentCalendar.getTime() - startCalendar.getTime()) / MS_PER_DAY); + days = _diff(currentCalendar,startCalendar); // 末伏 if (liQiuCalendar <= startCalendar) { if (days < 10) { @@ -1430,7 +1437,7 @@ } // 末伏第1天 startCalendar.setDate(startCalendar.getDate() + 10); - days = Math.floor((currentCalendar.getTime() - startCalendar.getTime()) / MS_PER_DAY); + days = _diff(currentCalendar,startCalendar); if (days < 10) { return this._buildNameAndIndex('末伏', days + 1); } @@ -1453,7 +1460,7 @@ var currentCalendar = ExactDate.fromYmd(this._p.solar.getYear(),this._p.solar.getMonth(),this._p.solar.getDay()); var startSolar = jieQi.getSolar(); var startCalendar = ExactDate.fromYmd(startSolar.getYear(),startSolar.getMonth(),startSolar.getDay()); - var days = Math.floor((currentCalendar.getTime() - startCalendar.getTime()) / MS_PER_DAY); + var days = _diff(currentCalendar,startCalendar); return LunarUtil.WU_HOU[(offset*3+Math.floor(days/5)) % LunarUtil.WU_HOU.length]; } }; @@ -2019,7 +2026,7 @@ getDayCount:function(){return this._p.dayCount;}, getFirstJulianDay:function(){return this._p.firstJulianDay;}, isLeap:function(){return this._p.month<0;}, - toString:function(){return this.getYear()+'年'+LunarUtil.MONTH[Math.abs(this.getMonth())]+'月('+this.getDayCount()+')天';} + toString:function(){return this.getYear()+'年'+(this.isLeap()?'闰':'')+LunarUtil.MONTH[Math.abs(this.getMonth())]+'月('+this.getDayCount()+')天';} }; }; return { diff --git a/package.json b/package.json index cac5152..5b06555 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lunar-javascript", - "version": "1.2.6", + "version": "1.2.7", "description": "lunar is a calendar library for Solar and Chinese Lunar.", "main": "index.js", "scripts": { @@ -50,5 +50,6 @@ "homepage": "https://github.com/6tail/lunar-javascript", "devDependencies": { "jest": "^26.6.3" - } + }, + "dependencies": {} }