UNPKG

lunar-fun

Version:

原生农历(阴历, 阴阳历)和公历(阳历)互相转换的插件

1 lines 9.22 kB
"use strict";const LUNAR_INFO={MIN_YEAR:1901,MAX_YEAR:2100,YEAR_INFO:["4e4ae0","22a570","7554d5","42d260","12d950","e56554","3656a0","a9ad0","5955d2","2a4ae0","79a5b6","4aa4d0","1ad250","e9d255","3ab540","ed6a0","5dada2","2e95b0","864977","524970","22a4b0","71b4b5","426a50","166d40","e1ab54","362b60","a9570","5d52f2","2a4970","796566","46d4a0","1aea50","e96a95","3a5ad0","122b60","e186e3","2e92e0","fd48d7","4ec950","22d4a0","edd8a6","3eb550","1656a0","e5a5b4","3625d0","a92d0","59d2b2","2aa950","75b557","466ca0","1ab550","ed5355","3a4da0","ea5b0","e14573","3252b0","7da9a8","4ae930","226aa0","71aea6","3eab50","164b60","65aae4","36a570","a5260","55f263","26d950","795b57","4656a0","1a96d0","6d4dd5","3e4ad0","ea4d0","5dd4d4","2ed250","7dd558","4ab540","1eb6a0","f195a6","4295b0","1649b0","65a974","36a4b0","ab27a","526a50","266d40","75af46","46ab60","1a9570","6d4af5","3e4970","1264b0","5d74a3","2aea50","7d6b58","4e5ac0","1eab60","7196d5","4292e0","16c960","61d954","32d4a0","6da50","597552","2656a0","75abb7","4a25d0","1e92d0","69cab5","3aa950","eb4a0","5dbaa4","2aad50","7d55d9","4e4ba0","22a5b0","f15176","4252b0","16a930","657954","326aa0","6ad50","595b52","2a4b60","75a6e6","46a4e0","1ad260","69ea65","36d530","e5aa0","5d76a3","2e96d0","7d4afb","4e4ad0","22a4d0","f1d0b6","3ed250","12d520","61dd45","32b5a0","656d0","5955b2","2a49b0","79a577","46a4b0","1aaa50","e9b255","3a6d20","aada0","dd4b63","2e9370","649f8","4e4970","2264b0","f168a6","3eea50","126aa0","e1a6c4","32aae0","a92e0","55d2e3","26c960","75d557","46d4a0","16da50","695d55","3a56a0","ea6d0","5d55d4","2e52d0","7da9b8","4ea950","1eb4a0","6db6a6","3ead50","1655a0","61aba4","32a5b0","a52b0","59b273","266930","757337","466aa0","1aad50","e94b55","3a4b60","ea570","6154e4","2ad160","79e968","4ad520","1edaa0","ed6aa6","3e56d0","164ae0","65a9d4","32a2d0","6d150","55f252","26d520"],HEAVENLY_STEMS:["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"],EARTHLY_BRANCHES:["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"],ZODIAC:["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"],CHINESE_MONTH:["正","二","三","四","五","六","七","八","九","十","冬","腊"],CHINESE_DATE:["零","一","二","三","四","五","六","七","八","九","十","初","廿","卅","年","月","日","闰"],CHINESE_SOLAR_TERMS:["立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至","小寒","大寒"]};class LunarFunClass{constructor(){}_missingParameters(){throw new Error("Missing parameter")}toJSON(e=this._missingParameters(),a=this._missingParameters()){if(!a)return"";let t=a.toString("16"),s=parseInt(t,16).toString(2);24!==s.length&&(s="0".repeat(24-s.length)+s);let r={year:+e},n=s.slice(-4);return"0000"===n?(r.isRun=!1,r.runMonth=0,r.runMonthDays=0):(r.isRun=!0,r.runMonth=parseInt(n,2),r.runMonthDays=+s.slice(0,1)+29),r.monthsDays=[],[...s.slice(8,20)].map(e=>{r.monthsDays.push(+e+29)}),r.firstMonth=parseInt(s.slice(6,8),2),r.firstDay=parseInt(s.slice(1,6),2),r}isLeapYear(e=this._missingParameters()){let a=+e;return Number.isNaN(a)?(console.warn("输入的年份参数有误"),!1):a<1582?a%4==0:a%4==0&&a%100!=0||a%400==0}getHeavenlyStems(e=this._missingParameters()){let a=+e;if(Number.isNaN(a))return console.warn("输入的年份参数有误"),"";let t=(a-3)%10;return 0===t&&(t=10),this.LUNAR_INFO.HEAVENLY_STEMS[t-1]}getEarthlyBranches(e=this._missingParameters()){let a=+e;if(Number.isNaN(a))return console.warn("输入的年份参数有误"),"";let t=(a-3)%12;return 0===t&&(t=12),this.LUNAR_INFO.EARTHLY_BRANCHES[t-1]}getZodiac(e=this._missingParameters()){let a=+e;if(Number.isNaN(a))return console.warn("输入的年份参数有误"),"";let t=(a-3)%12;return 0===t&&(t=12),this.LUNAR_INFO.ZODIAC[t-1]}getMonthNumberDays(e=this._missingParameters(),a=this._missingParameters()){return["",31,this.isLeapYear(e)?29:28,31,30,31,30,31,31,30,31,30,31][a]}getLunarMonthNumberDays(e=this._missingParameters(),a=this._missingParameters(),t=!1){let s=this.LUNAR_INFO.YEAR_INFO[e-this.LUNAR_INFO.MIN_YEAR],r=this.toJSON(+e,s);return r.isRun&&+a===r.runMonth&&t?r.runMonthDays:r.monthsDays[a-1]}formatLunarDate(e=this._missingParameters(),a=this._missingParameters(),t=this._missingParameters(),s=!1){let r=this.LUNAR_INFO.CHINESE_DATE,n=this.LUNAR_INFO.CHINESE_MONTH,i="",d=[...+e+""],u=[];d.map(e=>{u.push(r[+e])}),i=u.join("");let h=n[a-1];s&&(h=r[17]+h);let o="",m=[...+t+""];return t<=10?o=r[11]+r[+t]:t<=20?t<20?o=r[10]+r[+m[1]]:20==+t&&(o=r[2]+r[10]):t<=30&&(t<30?o=r[12]+r[+m[1]]:30==+t&&(o=r[3]+r[10])),i+r[14]+h+r[15]+o+r[16]}getLunarYearDaysTotal(e=this._missingParameters()){if(!e)return console.warn("输入的年份参数有误"),0;let a=this.LUNAR_INFO.YEAR_INFO[e-this.LUNAR_INFO.MIN_YEAR],t=this.toJSON(+e,a);return t.isRun?t.monthsDays.reduce((e,a)=>e+a,t.runMonthDays):t.monthsDays.reduce((e,a)=>e+a)}distanceLunarFirstDays(e=this._missingParameters(),a=this._missingParameters(),t=this._missingParameters(),s=!1){let r=this.LUNAR_INFO.YEAR_INFO[e-this.LUNAR_INFO.MIN_YEAR],n=this.toJSON(+e,r);return n.isRun?a<n.runMonth?n.monthsDays.slice(0,a-1).reduce((e,a)=>e+a,0)+t-1:a>n.runMonth?n.monthsDays.slice(0,a-1).reduce((e,a)=>e+a,n.runMonthDays)+t-1:a!==n.runMonth||s?a===n.runMonth&&s?n.monthsDays.slice(0,a).reduce((e,a)=>e+a,0)+t-1:void 0:n.monthsDays.slice(0,a-1).reduce((e,a)=>e+a,0)+t-1:n.monthsDays.slice(0,a-1).reduce((e,a)=>e+a,0)+t-1}distanceDate(e=this._missingParameters(),a=this._missingParameters()){let t=e-a;return Math.round(Math.abs(t)/1e3/60/60/24)}getDateYMD(e=this._missingParameters(),a=this._missingParameters(),t=this._missingParameters(),s=0,r=0,n=0){if(-480===(new Date).getTimezoneOffset())return new Date(+e,a-1,+t,s,r,n);{let i=new Date(+e,a-1,+t,s,r,n),d=(new Date).getTimezoneOffset(),u=i.getTime()-60*d*1e3-8*60*60*1e3;return new Date(u)}}formatDate(e,a="YYYY-MM-DD hh:mm:ss"){let t=function(e){if(void 0===e)return console.warn("注意,addZero() 补零方法没有接收到值,将返回空字符串"),"";let a=e-0;return Number.isNaN(a)?(console.warn("注意,addZero() 补零方法接收的值无法转换为数字,将返回空字符串"),""):isFinite(a)?a<10?"0"+a:""+a:(console.warn("注意,addZero() 补零方法接收的值不是js能解析的有限数值,将返回空字符串"),"")},s=function(e,a="YYYY-MM-DD hh:mm:ss"){if(!e)return console.error("formatReplace() 函数没有接收到 Date 时间日期对象。"),!1;let s=new Date(e.getTime()+8*60*60*1e3),r=["星期日","星期一","星期二","星期三","星期四","星期五","星期六"];return a.replace(/YYYY|M{1,2}|D{1,2}|h{1,2}|m{1,2}|s{1,2}|WT|W{1,2}|timestamp/g,function(a){switch(a){case"YYYY":return s.getUTCFullYear();case"M":return s.getUTCMonth()+1;case"MM":return t(s.getUTCMonth()+1);case"D":return s.getUTCDate();case"DD":return t(s.getUTCDate());case"h":return s.getUTCHours();case"hh":return t(s.getUTCHours());case"m":return s.getUTCMinutes();case"mm":return t(s.getUTCMinutes());case"s":return s.getUTCSeconds();case"ss":return t(s.getUTCSeconds());case"W":return s.getUTCDay();case"WW":return t(s.getUTCDay());case"WT":return r[s.getUTCDay()];case"timestamp":return e.getTime();default:return console.warn("没有查询到格式化字符串,请确认日期格式化字符串是否正确"),""}})};if(e)return s(e,a);{let e=null;if(-480===(new Date).getTimezoneOffset())e=new Date;else{let a=new Date,t=(new Date).getTimezoneOffset(),s=a.getTime()-60*t*1e3-8*60*60*1e3;e=new Date(s)}return s(e,a)}}gregorianToLunal(e=this._missingParameters(),a=this._missingParameters(),t=this._missingParameters()){let s=this.LUNAR_INFO.YEAR_INFO[e-this.LUNAR_INFO.MIN_YEAR],r=this.toJSON(+e,s),n=0;a>r.firstMonth?n=1:a<r.firstMonth?n=-1:+a===r.firstMonth&&(t>r.firstDay?n=1:t<r.firstDay?n=-1:+t===r.firstDay&&(n=0));let i=0,d=0,u=0,h=!1;1===n?i=+e:-1===n?(i=e-1,s=this.LUNAR_INFO.YEAR_INFO[i-this.LUNAR_INFO.MIN_YEAR],r=this.toJSON(i,s)):0===n&&(i=+e,d=1,u=1);let o=this.distanceDate(this.getDateYMD(i,r.firstMonth,r.firstDay),this.getDateYMD(e,a,t)),m=[...r.monthsDays];r.isRun&&m.splice(r.runMonth,0,r.runMonthDays);let N=0,c=!1;return m.reduce((e,a,t)=>(e+a>=o+1&&!c&&(c=!0,N=t,u=m[t]-(e+a-(o+1))),e+a),0),r.isRun?N+1<=r.runMonth?d=N+1:(d=N,N===r.runMonth&&(h=!0)):d=N+1,[+i,+d,+u,h]}lunalToGregorian(e=this._missingParameters(),a=this._missingParameters(),t=this._missingParameters(),s=!1){let r=this.LUNAR_INFO.YEAR_INFO[e-this.LUNAR_INFO.MIN_YEAR],n=this.toJSON(+e,r),i=this.distanceLunarFirstDays(+e,+a,+t,s)+this.distanceDate(this.getDateYMD(+e,1,1),this.getDateYMD(+e,n.firstMonth,n.firstDay)),d=this.isLeapYear(+e),u=d?366:365;if(i+1>u){let a=i+1-u;return a<=31?[+e+1,1,a]:[+e+1,2,a-31]}{let a=d?[31,29,31,30,31,30,31,31,30,31,30,31]:[31,28,31,30,31,30,31,31,30,31,30,31],t=0,s=0,r=!1;return a.reduce((e,n,d)=>(e+n>=i+1&&!r&&(r=!0,t=d,s=a[d]-(e+n-(i+1))),e+n),0),[+e,t+1,s]}}}LunarFunClass.prototype.LUNAR_INFO=LUNAR_INFO,function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a():"function"==typeof define&&define.amd?define(a):e.lunarFun=a()}(this,function(){return new LunarFunClass});