PHP公历农历转换(阴历阳历转换)阴历和阳历转换
1<?php
2/**
3* 公农历转换(1912 - 2012)
4*
5* Usage:
6* // 公历1983-10-5转农历
7* $lunar = new Lunar();
8* $date = $lunar->getLar('1983-10-5',0);
9* echo date("Y-m-d", $date);
10* // 农历1983-8-29转公历
11* $date = $lunar->getLar('1983-8-29',1);
12* echo date("Y-m-d", $date);
13*
14* @param string 日期
15* @param int 日期历法
16* - 0 公历
17* 1 农历
18*
19* @return timestamp
20
21
22 这是一个国历与农历互相转的Unit.
23
24 其中年份皆用民国年份, 请自行转换 (西元年-1911 = 民国年).
25 ***************************************************************************
26 *国农历对映表之说明 : *
27 ***************************************************************************
28 * 前二数字 = 闰月月份, 如果为 13 则没有闰月 *
29 * 第叁至第六数字 = 12 个月之大小月之2进位码->10进位 *
30 * 例如: *
31 * 101010101010 = 2730 *
32 * 1 : 代表大月(30天) 0 : 代表小月(29天) ==> 1月大2月小3月大.. *
33 * 第七位数字为闰月天数 *
34 * 0 : 没有闰月之天数 *
35 * 1 : 闰月为小月(29天) *
36 * 2 : 闰月为大月(30天) *
37 * 最後2位数字代表阳历之1月1日与阴历之1月1日相差天数 *
38 ***************************************************************************
39 这对映表只有民国一年至民国一百年, 如不敷您的使用请按照上述之方式自行增加.
40
41 这个程式没有判断您所输入之年,月,日是否正确, 请自行判断.
42
43 如果转换出来之农历的月份是闰月则传给您的值是***负数***
44 如果农历要转换国历如果是闰月请输入***负数***
45
46 此版本为FreeWare Version : 0.1
47 您可以自行修改, 但最好可以将修改过之程式Mail一份给我.
48 如果您要用於商业用途, 请mail给我告知您的用途及原因.
49
50*/
51
52class Lunar {
53 var $LMDay = array();
54 var $InterMonth = 0;
55 var $InterMonthDays = 0;
56 var $SLRangeDay = 0;
57
58 var $SMDay = array(1 => 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
59 var $LongLife = array( 1 =>
60 '132637048', '133365036', '053365225', '132900044', '131386034', '022778122', //6
61 '132395041', '071175231', '131175050', '132635038', '052891127', '131701046', //12
62 '131748035', '042741223', '130694043', '132391032', '021327122', '131175040', //18
63 '061623129', '133402047', '133402036', '051769125', '131453044', '130694034', //24
64 '032158223', '132350041', '073213230', '133221049', '133402038', '063466226', //30
65 '132901045', '131130035', '042651224', '130605043', '132349032', '023371121', //36
66 '132709040', '072901128', '131738047', '132901036', '051333226', '131210044', //42
67 '132651033', '031111223', '131323042', '082714130', '133733048', '131706038', //48
68 '062794127', '132741045', '131206035', '042734124', '132647043', '131318032', //54
69 '033878120', '133477039', '071461129', '131386047', '132413036', '051245126', //60
70 '131197045', '132637033', '043405122', '133365041', '083413130', '132900048', //66
71 '132922037', '062394227', '132395046', '131179035', '042711124', '132635043', //72
72 '102855132', '131701050', '131748039', '062804128', '132742047', '132359036', //78
73 '051199126', '131175045', '131611034', '031866122', '133749040', '081717130', //84
74 '131452049', '132742037', '052413127', '132350046', '133222035', '043477123', //90
75 '133402042', '133493031', '021877121', '131386039', '072747128', '130605048', //96
76 '132349037', '053243125', '132709044', '132890033');
77
78 function getLar($date, $isLunar = 1){
79 list($year, $month, $day) = split("-", $date);
80 if($isLunar == 1)
81 return $this->Lunar2Solar($year, $month, $day);
82 else
83 return $this->Solar2Lunar($year, $month, $day);
84 }
85
86 function IsLeapYear($AYear){
87 return ($AYear % 4 == 0) and (($AYear % 100 <> 0) or ($AYear % 400 == 0));
88 }
89
90 function CovertLunarMonth($magicno){
91 $m = $magicno;
92 for ($i = 12; $i >= 1; $i--){
93 $size = $m % 2;
94 if ($size == 0)
95 $this->LMDay[$i] = 29;
96 else
97 $this->LMDay[$i] = 30;
98 $m = floor($m / 2);
99 }
100 }
101
102 function ProcessMagicStr($yy){
103 $yy = $yy - 1911;
104 $magicstr = $this->LongLife[$yy];
105 $this->InterMonth = substr($magicstr, 0, 2);
106 $LunarMonth = substr($magicstr, 2, 4);
107 $this->CovertLunarMonth($LunarMonth);
108 $dsize = substr($magicstr, 6, 1);
109 switch ($dsize) {
110 case 0 :
111 $this->InterMonthDays = 0;
112 break;
113 case 1 :
114 $this->InterMonthDays = 29;
115 break;
116 case 2 :
117 $this->InterMonthDays = 30;
118 break;
119 }
120 $this->SLRangeDay = substr($magicstr, 7, 2);
121 }
122
123 function DaysPerLunarMonth($LYear, $LMonth){
124 $this->;ProcessMagicStr($LYear);
125 if ($LMonth < 0)
126 return $this->InterMonthDays;
127 else
128 return $this->LMDay[$LMonth];
129 }
130
131 function Solar2Lunar($SYear, $SMonth, $SDay){
132 if( !(1912 <= $SYear && $SYear <= 2012) ){
133 return false;
134 }
135 $day = 0;
136 if ($this->isLeapYear($SYear))
137 $this->SMDay[2] = 29;
138 $this->;ProcessMagicStr($SYear);
139 if ($SMonth == 1)
140 $day = $SDay;
141 else {
142 for($i = 1; $i <= $SMonth-1; $i++)
143 $day = $day + $this->SMDay[$i];
144 $day = $day + $SDay;
145 }
146 if ($day <= $this->SLRangeDay) {
147 $day = $day - $this->SLRangeDay;
148 $this->processmagicstr($SYear-1);
149 for ($i = 12; $i >= 1; $i--){
150 $day = $day + $this->LMDay[$i];
151 if ($day > 0)
152 break;
153 }
154 $LYear = $SYear - 1;
155 $LMonth = $i;
156 $LDay = $day;
157 } else {
158 $day = $day - $this->SLRangeDay;
159 for($i = 1; $i <= $this->InterMonth-1; $i++){
160 $day = $day - $this->LMDay[$i];
161 if ($day <= 0)
162 break;
163 }
164 if ($day <= 0) {
165 $LYear = $SYear;
166 $LMonth = $i;
167 $LDay = $day + $this->LMDay[$i];
168 } else {
169 $day = $day - $this->LMDay[$this->InterMonth];
170 if ($day <= 0) {
171 $LYear = $SYear;
172 $LMonth = $this->InterMonth;
173 $LDay = $day + $this->LMDay[$this->InterMonth];
174 } else {
175 $this->LMDay[$this->InterMonth] = $this->InterMonthDays;
176 for ($i = $this->InterMonth; $i <= 12; $i++){
177 $day = $day - $this->LMDay[$i];
178 if ($day <= 0)
179 break;
180 }
181 if ($i == $this->InterMonth)
182 $LMonth = 0 - $this->InterMonth;
183 else
184 $LMonth = $i;
185 $LYear = $SYear;
186 $LDay = $day + $this->LMDay[$i];
187 }
188 }
189 }
190 return mktime(0, 0, 0, $LMonth, $LDay, $LYear);
191 }
192
193 function Lunar2Solar($LYear, $LMonth, $LDay){
194 if( !(1912 <= $LYear && $LYear <= 2012) ){
195 return false;
196 }
197 $day = 0;
198 $SYear = $LYear;
199 if ($this->isLeapYear($SYear))
200 $this->SMDay[2] = 29;
201 $this->processmagicstr($SYear);
202 if ($LMonth < 0)
203 $day = $this->LMDay[$this->InterMonth];
204 if ($LMonth <> 1)
205 for ($i = 1; $i <= $LMonth-1; $i++)
206 $day = $day + $this->LMDay[$i];
207 $day = $day + $LDay + $this->SLRangeDay;
208 if (($this->InterMonth <> 13) and ($this->InterMonth < $LMonth))
209 $day = $day + $this->InterMonthDays;
210 for ($i = 1; $i <= 12; $i++){
211 $day = $day - $this->SMDay[$i];
212 if ($day <= 0)
213 break;
214 }
215 if ($day > 0) {
216 $SYear = $SYear + 1;
217 if ($this->isLeapYear($SYear))
218 $this->SMDay[2] = 29;
219 for ($i = 1; $i <= 12; $i++){
220 $day = $day - $this->SMDay[$i];
221 if ($day <= 0)
222 break;
223 }
224 }
225 $day = $day + $this->SMDay[$i];
226 $SMonth = $i;
227 $SDay = $day;
228 return mktime(0, 0, 0, $SMonth, $SDay, $SYear);
229 }
230}
231?>
232
233
234
转载于:https://www.cnblogs.com/zhaoshun/archive/2009/02/07/1385726.html
PHP公历农历转换(阴历阳历转换)阴历和阳历转换相关推荐
- JavaScript之js-calendar-converter插件的使用、日历、日期、转换、阳历、阴历、公历、农历、calendar
文章目录 前言 下载js-calendar-converter插件 插件介绍 查询属性表 获取的方法 转换的方法 设置的方法 微信小程序查看效果 日历选择案例 前言 在做算命项目时遇到公历和农历相互转 ...
- PB中公历与农历(阳历与阴历)的互相转换——主要是农历转公历(阴历转阳历)
PB中关于公历转农历的算法,网上有很多,思路也大致一样,在这里我就不再进行说明了. 本文主要是想跟所有PB爱好者,分享农历转公历的方法. 转换思路为:根据传入的农历日期,找到第一个小于传入日期的基准日 ...
- uniApp实现公农日历相互转换、公历、农历、阳历、阴历、calendar
文章目录 前言 版本一 版本二 效果图 第一步,git下载组件 版本一 版本二 第二步,下载依赖包 第三步,使用 版本一 版本二 总结 版本一 版本二 微信小程序查看效果 关于js-calendar- ...
- python公历转农历_python 阳历转阴历代码(2)
main.py #!/usr/bin/env python # -*- coding: utf-8 -*- #给出阳历日期转换成阴历日期 import math from daysbetween im ...
- 阳历、阴历、干支历转换 - For JAVA
历法计算,可实现阳历.阴历.干支历的相互转换 一个可实现阳历.阴历.干支历间相互转换的JAVA工具 项目Github地址: https://github.com/opprime/calendarist ...
- java 公历 农历_java已知阳历日期求对应阴历日期源代码
import java.text.*; import java.util.*; class ChineseCalendarGB { private int gregorianYear; private ...
- mysql将公历农历转换_php 公历农历如何实现转换
php公历农历转换的实现方法:首先创建一个PHP示例文件,并设置该文件的编码为"utf-8":然后引入"lunar.php":接着通过"$lunar- ...
- python农历_Python如何实现阳历转阴历的方法分享
展开全部 pip里有一个sxtwl的库.很方便的 pip install sxtwl 就能安装了. 如果e5a48de588b662616964757a686964616f3133336566356 ...
- php阳历转阴历(农历),阴历转阳历的方法
2019独角兽企业重金招聘Python工程师标准>>> <?php header ( "Content-Type: text/html; charset=utf-8& ...
- php转字,PHP汉字拼音转换和公历农历转换
1.PHP汉字转拼音 Pinyin.class.php类文件可以将大多数汉字转换成汉语拼音,当然也有个别生僻字不能转换,如果你想转换所有的汉字拼音的话,可能需要再配合一个汉字字库来实现,使用该类文件就 ...
最新文章
- 机器学习相关——SVD分解
- C#和C常用的API操作窗口的代码积累
- 10 Equality constrained minimization
- php的工作模式CGI,FastCGI,PHP-CGI与PHP-FPM(转)
- 酒泉于洋计算机学校,于洋
- Unity3d地形刷入自定义树木
- RMAN冷备份异机还原
- CentOS虚拟机挂载U盘
- vue element 实现树形菜单栏n层级分类,NavMenu menu
- Unicode与GBK互转
- export学习笔记(Es6阮一峰)
- 求勾股数c语言OJ,C语言求勾股数(详解版)
- 计算机辅助教学课件中的辅导型模式是以,【2017年整理】1、下面属于计算机辅助教学简称的是 ( ).doc...
- [BJDCTF2020]Mark loves cat 1——(超详细 三种方法)
- 杜比AC-3与DTS的音效对比 浅解
- 如何将VSCode添加到鼠标右键菜单
- 聚焦技术,锐意创新,GaussDB给世界一个更优选择
- 受保护的PDF文件如何编辑【PDF解密软件】
- KDB内核调试 - 1
- Java信息管理系统界面设计(包括登录界面及界面切换)