Giter Site home page Giter Site logo

stellaye / paipan Goto Github PK

View Code? Open in Web Editor NEW

This project forked from hkargc/paipan

0.0 0.0 0.0 629 KB

PHP JavaScript 农历公历干支历互转,万年历,四柱,六十甲子,属相,十二星座,二十四节气,支持从-1000到3000年间的八字排盘及大运推算,支持真太阳时,支持分析刑冲合害关系

Home Page: https://hkargv.github.io/paipan/

PHP 100.00%

paipan's Introduction

PHP JavaScript 农历公历干支历互转,万年历,四柱,六十甲子,属相,十二星座,二十四节气,支持从-1000到3000年间的八字排盘及大运推算,真太阳时排盘,分析刑冲合害关系

算法原理和JS源码完全来自: http://www.bieyu.com/
真太阳时模块来自: http://www.nongli.net/sxwnl/

演示地址: https://hkargv.github.io/paipan/

此工具类包含:
1,儒略日历
以公元前4713年1月1日12时为起点,每天(每廿四小时)加一的历法;
比如2020年1月1日12点的儒略日为2458850,2020年1月1日0点的儒略日为(2458850 - 0.5);
这种历法方便各种计算,比如已知起点日为周一可求得任一日期的星期,已知起点日的干支可求得任一日期的干支

2,公历(阳历,格里历,西历)
以地球绕太阳公转计算的历法;
用公式可直接求得两分两至(春分秋分夏至冬至);
公转是椭圆轨道,把这个椭圆均分为24等分,可求得**的二十四节气;12等分则为西方的十二星座;
此工具计算出的时间点误差在20秒内;
已知2020年春分点为3月20日11点49分57秒,则算法认为57秒前是双鱼座,57秒后是白羊座,是否按此计算请自行斟酌;
每月两节不变更,最多相差一两天.上半年来六廿一,下半年是八廿三 这里的六廿一和八廿三说的是公历;

3,阴阳历(农历,民间称阴历)
严格地说,以月球绕地一周为一个月计算的历法为阴历;
如果这样,阴历跟二十四节气的时间差就越来越大,我们可能要在夏季过大年初一;
也许人们为了能固定在立春前后吃上年夜饭(May be...),引入闰月的概念,使之与公转齐平,所以农历考虑了月亮又考虑了太阳,为阴阳历;
陰曆正月與置閏这一段很难理解,请参看 http://www.bieyu.com/

4,干支历
这种历法现在可能多用于命理学和历史研究领域,与二十四节气相关;
由于一年只有12个月而不是60个月,一天只有12小时而不是60小时,所以合法的四柱并不是简单的排列组合;
年柱跟月柱有固定的关系:甲己之年丙作首,乙庚之歲戊為頭,丙辛歲首尋庚起,丁壬壬位順行流,若言戊癸何方發,甲寅之上好追求.
日柱跟时柱也有固定关系:甲己還加甲,乙庚丙作初,丙辛從戊起,丁壬庚子屬,戊癸何方發,壬子是真途;
八字组合共有518400种,且一個八字出現後,至少要60年後才会再出現,最多要240年後才又出現;
已知2020立春点为2月4日17时3分44秒,44秒前为己亥年,44秒后为庚子年;
已知2020驚蟄为3月5日10时57分22秒,22秒前为戊寅月,22秒后为己卯月;
是否按此计算请自行斟酌,尤其是要用在命理学上的时候;

5,真太阳时
粗略理解: 我们用的东八区时间(北京标准时间),是东经120度线的理论时间(平太阳时,平均太阳时),按照地球自转一圈严格为24小时计算,
正好每经度4分钟(24小时*60/360度 = 4分钟),我国跨越五个时区,已知经度和北京标准时间可以计算出地方理论时间(地方平太阳时,(j-120)*4).
实际上地球自转速度有快有慢,考虑这个快慢而计算出的时间为真太阳时,真太阳时的正午12点,正好当地的(如日晷)影子最短,
有说古人用日晷计时,没有北京时间的说法,所以排八字要用真太阳时,请自行斟酌

6,精确度问题
当前项目与寿星万年历进行过逐时比对,结果如下:
公历儒略历部分完全匹配
节气及月相部分相差不超过二十秒(均为天文科学上的算法)
真太阳时部分完全匹配(从寿星天文历搬过来的)
农历1800年至2300年完全匹配,1800年前的较复杂,请以寿星万年历为准

7,需要解释的
采取真太阳时排盘,由于年柱以立春为界,月柱以节令为界,那么廿四节气是否也要转为真太阳时?
真太阳时排盘有几种方案,请自行斟酌:
a.仅对日柱时柱做调整,年柱月柱不动(寿星万年历,常用方案)
b.年月日时柱均做调整,节气时刻不动(本项目方案)
c.年月日时柱均做调整,节气时刻均转为真太阳时(科学地说应该用此方案)
廿四节气是针对北半球而言的,南半球的干支历排盘以及星座等要如何处理呢?

PHP与Javascript的方法是一致的,如下:

公历转儒略日:
p.Jdays(yy, mm, dd, hh, mt, ss);

儒略日转公历:
p.Jtime(jd);

公历转农历:
p.Solar2Lunar(yy, mm, dd);

农历转公历:
p.Lunar2Solar(yy, mm, dd, ry);

公历转干支历:
p.GetGZ(yy, mm, dd, hh, mt, ss);

干支历转(搜索)公历:
p.gz2gl(ygz, mgz, dgz, hgz, yeai, mx);

根据公历进行八字真太阳时排盘
p.fatemaps(xb, yy, mm, dd, hh, mt, ss, j); //j为经度,东经80度27分表示: 80+27/60

//引申出来的方法
p.ValidDate(yy, mm, dd);
p.GetWeek(yy, mm, dd); //计算公历的某天是星期几
p.GetSolarDays(yy, mm); //获取公历某个月有多少天
p.GetLunarDays(yy, mm, ry); //获取农历某个月有多少天
p.GetRunyue(yy); //获取农历某年的闰月,0为无闰月
p.GetXZ(yy, mm, dd, hh, mt, ss); //根据公历年月日精确计算星座下标
p.GetAdjustedJQ(yy); //求出含某公历年春分點開始的24节气的儒略日历时间
p.MGZ(ygz); //根据年干支计算所有合法的月干支: 甲己之年丙作首...
p.HGZ(dgz); //根据日干支计算所有合法的时干支: 甲己還加甲...
p.GZ(tg, dz);

//分析刑冲合害关系
GetGX(tg, dz); //参看demo.html 及 docs/make_gx.php

paipan's People

Contributors

swling avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.