php公历转换天干地支,关于php公历农历的互相转换,你可能会需要!

2023-10-18 18:50

本文主要是介绍php公历转换天干地支,关于php公历农历的互相转换,你可能会需要!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

570402f96ad7cdb8bdd4de57704efea9.png

废话不多,直接上代码<?php

class Lunar

{

/**

* Created by 闻海南.

* User: timeless

* Date: 2018-5-29

* Time: 上午9:32s

*/

var $MIN_YEAR = 1891;

var $MAX_YEAR = 2100;

var $lunarInfo = array(

array(0, 2, 9, 21936), array(6, 1, 30, 9656), array(0, 2, 17, 9584), array(0, 2, 6, 21168), array(5, 1, 26, 43344), array(0, 2, 13, 59728),

array(0, 2, 2, 27296), array(3, 1, 22, 44368), array(0, 2, 10, 43856), array(8, 1, 30, 19304), array(0, 2, 19, 19168), array(0, 2, 8, 42352),

array(5, 1, 29, 21096), array(0, 2, 16, 53856), array(0, 2, 4, 55632), array(4, 1, 25, 27304), array(0, 2, 13, 22176), array(0, 2, 2, 39632),

array(2, 1, 22, 19176), array(0, 2, 10, 19168), array(6, 1, 30, 42200), array(0, 2, 18, 42192), array(0, 2, 6, 53840), array(5, 1, 26, 54568),

array(0, 2, 14, 46400), array(0, 2, 3, 54944), array(2, 1, 23, 38608), array(0, 2, 11, 38320), array(7, 2, 1, 18872), array(0, 2, 20, 18800),

array(0, 2, 8, 42160), array(5, 1, 28, 45656), array(0, 2, 16, 27216), array(0, 2, 5, 27968), array(4, 1, 24, 44456), array(0, 2, 13, 11104),

array(0, 2, 2, 38256), array(2, 1, 23, 18808), array(0, 2, 10, 18800), array(6, 1, 30, 25776), array(0, 2, 17, 54432), array(0, 2, 6, 59984),

array(5, 1, 26, 27976), array(0, 2, 14, 23248), array(0, 2, 4, 11104), array(3, 1, 24, 37744), array(0, 2, 11, 37600), array(7, 1, 31, 51560),

array(0, 2, 19, 51536), array(0, 2, 8, 54432), array(6, 1, 27, 55888), array(0, 2, 15, 46416), array(0, 2, 5, 22176), array(4, 1, 25, 43736),

array(0, 2, 13, 9680), array(0, 2, 2, 37584), array(2, 1, 22, 51544), array(0, 2, 10, 43344), array(7, 1, 29, 46248), array(0, 2, 17, 27808),

array(0, 2, 6, 46416), array(5, 1, 27, 21928), array(0, 2, 14, 19872), array(0, 2, 3, 42416), array(3, 1, 24, 21176), array(0, 2, 12, 21168),

array(8, 1, 31, 43344), array(0, 2, 18, 59728), array(0, 2, 8, 27296), array(6, 1, 28, 44368), array(0, 2, 15, 43856), array(0, 2, 5, 19296),

array(4, 1, 25, 42352), array(0, 2, 13, 42352), array(0, 2, 2, 21088), array(3, 1, 21, 59696), array(0, 2, 9, 55632), array(7, 1, 30, 23208),

array(0, 2, 17, 22176), array(0, 2, 6, 38608), array(5, 1, 27, 19176), array(0, 2, 15, 19152), array(0, 2, 3, 42192), array(4, 1, 23, 53864),

array(0, 2, 11, 53840), array(8, 1, 31, 54568), array(0, 2, 18, 46400), array(0, 2, 7, 46752), array(6, 1, 28, 38608), array(0, 2, 16, 38320),

array(0, 2, 5, 18864), array(4, 1, 25, 42168), array(0, 2, 13, 42160), array(10, 2, 2, 45656), array(0, 2, 20, 27216), array(0, 2, 9, 27968),

array(6, 1, 29, 44448), array(0, 2, 17, 43872), array(0, 2, 6, 38256), array(5, 1, 27, 18808), array(0, 2, 15, 18800), array(0, 2, 4, 25776),

array(3, 1, 23, 27216), array(0, 2, 10, 59984), array(8, 1, 31, 27432), array(0, 2, 19, 23232), array(0, 2, 7, 43872), array(5, 1, 28, 37736),

array(0, 2, 16, 37600), array(0, 2, 5, 51552), array(4, 1, 24, 54440), array(0, 2, 12, 54432), array(0, 2, 1, 55888), array(2, 1, 22, 23208),

array(0, 2, 9, 22176), array(7, 1, 29, 43736), array(0, 2, 18, 9680), array(0, 2, 7, 37584), array(5, 1, 26, 51544), array(0, 2, 14, 43344),

array(0, 2, 3, 46240), array(4, 1, 23, 46416), array(0, 2, 10, 44368), array(9, 1, 31, 21928), array(0, 2, 19, 19360), array(0, 2, 8, 42416),

array(6, 1, 28, 21176), array(0, 2, 16, 21168), array(0, 2, 5, 43312), array(4, 1, 25, 29864), array(0, 2, 12, 27296), array(0, 2, 1, 44368),

array(2, 1, 22, 19880), array(0, 2, 10, 19296), array(6, 1, 29, 42352), array(0, 2, 17, 42208), array(0, 2, 6, 53856), array(5, 1, 26, 59696),

array(0, 2, 13, 54576), array(0, 2, 3, 23200), array(3, 1, 23, 27472), array(0, 2, 11, 38608), array(11, 1, 31, 19176), array(0, 2, 19, 19152),

array(0, 2, 8, 42192), array(6, 1, 28, 53848), array(0, 2, 15, 53840), array(0, 2, 4, 54560), array(5, 1, 24, 55968), array(0, 2, 12, 46496),

array(0, 2, 1, 22224), array(2, 1, 22, 19160), array(0, 2, 10, 18864), array(7, 1, 30, 42168), array(0, 2, 17, 42160), array(0, 2, 6, 43600),

array(5, 1, 26, 46376), array(0, 2, 14, 27936), array(0, 2, 2, 44448), array(3, 1, 23, 21936), array(0, 2, 11, 37744), array(8, 2, 1, 18808),

array(0, 2, 19, 18800), array(0, 2, 8, 25776), array(6, 1, 28, 27216), array(0, 2, 15, 59984), array(0, 2, 4, 27424), array(4, 1, 24, 43872),

array(0, 2, 12, 43744), array(0, 2, 2, 37600), array(3, 1, 21, 51568), array(0, 2, 9, 51552), array(7, 1, 29, 54440), array(0, 2, 17, 54432),

array(0, 2, 5, 55888), array(5, 1, 26, 23208), array(0, 2, 14, 22176), array(0, 2, 3, 42704), array(4, 1, 23, 21224), array(0, 2, 11, 21200),

array(8, 1, 31, 43352), array(0, 2, 19, 43344), array(0, 2, 7, 46240), array(6, 1, 27, 46416), array(0, 2, 15, 44368), array(0, 2, 5, 21920),

array(4, 1, 24, 42448), array(0, 2, 12, 42416), array(0, 2, 2, 21168), array(3, 1, 22, 43320), array(0, 2, 9, 26928), array(7, 1, 29, 29336),

array(0, 2, 17, 27296), array(0, 2, 6, 44368), array(5, 1, 26, 19880), array(0, 2, 14, 19296), array(0, 2, 3, 42352), array(4, 1, 24, 21104),

array(0, 2, 10, 53856), array(8, 1, 30, 59696), array(0, 2, 18, 54560), array(0, 2, 7, 55968), array(6, 1, 27, 27472), array(0, 2, 15, 22224),

array(0, 2, 5, 19168), array(4, 1, 25, 42216), array(0, 2, 12, 42192), array(0, 2, 1, 53584), array(2, 1, 21, 55592), array(0, 2, 9, 54560)

);

/**

* 将阳历转换为阴历

* @param year 公历-年

* @param month 公历-月

* @param date 公历-日

*/

function convertSolarToLunar($year, $month, $date)

{//debugger;

$yearData = $this->lunarInfo[$year - $this->MIN_YEAR];

if ($year == $this->MIN_YEAR && $month <= 2 && $date <= 9) {

return array(1891, '正月', '初一', '辛卯', 1, 1, '兔');

}

return $this->getLunarByBetween($year, $this->getDaysBetweenSolar($year, $month, $date, $yearData[1], $yearData[2]));

}

function convertSolarMonthToLunar($year, $month)

{

$yearData = $this->lunarInfo[$year - $this->MIN_YEAR];

if ($year == $this->MIN_YEAR && $month <= 2 && $date <= 9) {

return array(1891, '正月', '初一', '辛卯', 1, 1, '兔');

}

$month_days_ary = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

$dd = $month_days_ary[$month];

if ($this->isLeapYear($year) && $month == 2) $dd++;

$lunar_ary = array();

for ($i = 1; $i < $dd; $i++) {

$array = $this->getLunarByBetween($year, $this->getDaysBetweenSolar($year, $month, $i, $yearData[1], $yearData[2]));

$array[] = $year . '-' . $month . '-' . $i;

$lunar_ary[$i] = $array;

}

return $lunar_ary;

}

/**

* 将阴历转换为阳历

* @param year 阴历-年

* @param month 阴历-月,闰月处理:例如如果当年闰五月,那么第二个五月就传六月,相当于阴历有13个月,只是有的时候第13个月的天数为0

* @param date 阴历-日

*/

function convertLunarToSolar($year, $month, $date)

{

$yearData = $this->lunarInfo[$year - $this->MIN_YEAR];

$between = $this->getDaysBetweenLunar($year, $month, $date);

$res = mktime(0, 0, 0, $yearData[1], $yearData[2], $year);

$res = date('Y-m-d', $res + $between * 24 * 60 * 60);

$day = explode('-', $res);

$year = $day[0];

$month = $day[1];

$day = $day[2];

return array($year, $month, $day);

}

/**

* 判断是否是闰年

* @param year

*/

function isLeapYear($year)

{

return (($year % 4 == 0 && $year % 100 != 0) || ($year % 400 == 0));

}

/**

* 获取干支纪年

* @param year

*/

function getLunarYearName($year)

{

$sky = array('庚', '辛', '壬', '癸', '甲', '乙', '丙', '丁', '戊', '己');

$earth = array('申', '酉', '戌', '亥', '子', '丑', '寅', '卯', '辰', '巳', '午', '未');

$year = $year . '';

return $sky[$year{3}] . $earth[$year % 12];

}

/**

* 根据阴历年获取生肖

* @param year 阴历年

*/

function getYearZodiac($year)

{

$zodiac = array('猴', '鸡', '狗', '猪', '鼠', '牛', '虎', '兔', '龙', '蛇', '马', '羊');

return $zodiac[$year % 12];

}

/**

* 获取阳历月份的天数

* @param year 阳历-年

* @param month 阳历-月

*/

function getSolarMonthDays($year, $month)

{

$monthHash = array('1' => 31, '2' => $this->isLeapYear($year) ? 29 : 28, '3' => 31, '4' => 30, '5' => 31, '6' => 30, '7' => 31, '8' => 31, '9' => 30, '10' => 31, '11' => 30, '12' => 31);

return $monthHash["$month"];

}

/**

* 获取阴历月份的天数

* @param year 阴历-年

* @param month 阴历-月,从一月开始

*/

function getLunarMonthDays($year, $month)

{

$monthData = $this->getLunarMonths($year);

return $monthData[$month - 1];

}

/**

* 获取阴历每月的天数的数组

* @param year

*/

function getLunarMonths($year)

{

$yearData = $this->lunarInfo[$year - $this->MIN_YEAR];

$leapMonth = $yearData[0];

$bit = decbin($yearData[3]);

for ($i = 0; $i < strlen($bit); $i++) {

$bitArray[$i] = substr($bit, $i, 1);

}

for ($k = 0, $klen = 16 - count($bitArray); $k < $klen; $k++) {

array_unshift($bitArray, '0');

}

$bitArray = array_slice($bitArray, 0, ($leapMonth == 0 ? 12 : 13));

for ($i = 0; $i < count($bitArray); $i++) {

$bitArray[$i] = $bitArray[$i] + 29;

}

return $bitArray;

}

/**

* 获取农历每年的天数

* @param year 农历年份

*/

function getLunarYearDays($year)

{

$yearData = $this->lunarInfo[$year - $this->MIN_YEAR];

$monthArray = $this->getLunarYearMonths($year);

$len = count($monthArray);

return ($monthArray[$len - 1] == 0 ? $monthArray[$len - 2] : $monthArray[$len - 1]);

}

function getLunarYearMonths($year)

{//debugger;

$monthData = $this->getLunarMonths($year);

$res = array();

$temp = 0;

$yearData = $this->lunarInfo[$year - $this->MIN_YEAR];

$len = ($yearData[0] == 0 ? 12 : 13);

for ($i = 0; $i < $len; $i++) {

$temp = 0;

for ($j = 0; $j <= $i; $j++) {

$temp += $monthData[$j];

}

array_push($res, $temp);

}

return $res;

}

/**

* 获取闰月

* @param year 阴历年份

*/

function getLeapMonth($year)

{

$yearData = $this->lunarInfo[$year - $this->MIN_YEAR];

return $yearData[0];

}

/**

* 计算阴历日期与正月初一相隔的天数

* @param year

* @param month

* @param date

*/

function getDaysBetweenLunar($year, $month, $date)

{

$yearMonth = $this->getLunarMonths($year);

$res = 0;

for ($i = 1; $i < $month; $i++) {

$res += $yearMonth[$i - 1];

}

$res += $date - 1;

return $res;

}

/**

* 计算2个阳历日期之间的天数

* @param year 阳历年

* @param cmonth

* @param cdate

* @param dmonth 阴历正月对应的阳历月份

* @param ddate 阴历初一对应的阳历天数

*/

function getDaysBetweenSolar($year, $cmonth, $cdate, $dmonth, $ddate)

{

$a = mktime(0, 0, 0, $cmonth, $cdate, $year);

$b = mktime(0, 0, 0, $dmonth, $ddate, $year);

return ceil(($a - $b) / 24 / 3600);

}

/**

* 根据距离正月初一的天数计算阴历日期

* @param year 阳历年

* @param between 天数

*/

function getLunarByBetween($year, $between)

{//debugger;

$lunarArray = array();

$yearMonth = array();

$t = 0;

$e = 0;

$leapMonth = 0;

$m = '';

if ($between == 0) {

array_push($lunarArray, $year, '正月', '初一');

$t = 1;

$e = 1;

} else {

$year = $between > 0 ? $year : ($year - 1);

$yearMonth = $this->getLunarYearMonths($year);

$leapMonth = $this->getLeapMonth($year);

$between = $between > 0 ? $between : ($this->getLunarYearDays($year) + $between);

for ($i = 0; $i < 13; $i++) {

if ($between == $yearMonth[$i]) {

$t = $i + 2;

$e = 1;

break;

} else if ($between < $yearMonth[$i]) {

$t = $i + 1;

$e = $between - (empty($yearMonth[$i - 1]) ? 0 : $yearMonth[$i - 1]) + 1;

break;

}

}

$m = ($leapMonth != 0 && $t == $leapMonth + 1) ? ('闰' . $this->getCapitalNum($t - 1, true)) : $this->getCapitalNum(($leapMonth != 0 && $leapMonth + 1 < $t ? ($t - 1) : $t), true);

array_push($lunarArray, $year, $m, $this->getCapitalNum($e, false));

}

array_push($lunarArray, $this->getLunarYearName($year));// 天干地支

array_push($lunarArray, $t, $e);

array_push($lunarArray, $this->getYearZodiac($year));// 12生肖

array_push($lunarArray, $leapMonth);// 闰几月

return $lunarArray;

}

/**

* 获取数字的阴历叫法

* @param num 数字

* @param isMonth 是否是月份的数字

*/

function getCapitalNum($num, $isMonth)

{

$isMonth = $isMonth || false;

$dateHash = array('0' => '', '1' => '一', '2' => '二', '3' => '三', '4' => '四', '5' => '五', '6' => '六', '7' => '七', '8' => '八', '9' => '九', '10' => '十 ');

$monthHash = array('0' => '', '1' => '正月', '2' => '二月', '3' => '三月', '4' => '四月', '5' => '五月', '6' => '六月', '7' => '七月', '8' => '八月', '9' => '九月', '10' => '十月', '11' => '冬月', '12' => '腊月');

$res = '';

if ($isMonth) {

$res = $monthHash[$num];

} else {

if ($num <= 10) {

$res = '初' . $dateHash[$num];

} else if ($num > 10 && $num < 20) {

$res = '十' . $dateHash[$num - 10];

} else if ($num == 20) {

$res = "二十";

} else if ($num > 20 && $num < 30) {

$res = "廿" . $dateHash[$num - 20];

} else if ($num == 30) {

$res = "三十";

}

}

return $res;

}

/*class end*/

}

header("Content-Type:text/html;charset=utf-8");

$lunar = new Lunar();

$month = $lunar->convertSolarToLunar('2017', '03', '09');//将阳历转换为阴历

echo '

';

print_r($month);

更多相关知识,请访问PHP中文网!

这篇关于php公历转换天干地支,关于php公历农历的互相转换,你可能会需要!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/234492

相关文章

Java数字转换工具类NumberUtil的使用

《Java数字转换工具类NumberUtil的使用》NumberUtil是一个功能强大的Java工具类,用于处理数字的各种操作,包括数值运算、格式化、随机数生成和数值判断,下面就来介绍一下Number... 目录一、NumberUtil类概述二、主要功能介绍1. 数值运算2. 格式化3. 数值判断4. 随机

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型

Python实现视频转换为音频的方法详解

《Python实现视频转换为音频的方法详解》这篇文章主要为大家详细Python如何将视频转换为音频并将音频文件保存到特定文件夹下,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果5. 注意事项

使用Python实现图片和base64转换工具

《使用Python实现图片和base64转换工具》这篇文章主要为大家详细介绍了如何使用Python中的base64模块编写一个工具,可以实现图片和Base64编码之间的转换,感兴趣的小伙伴可以了解下... 简介使用python的base64模块来实现图片和Base64编码之间的转换。可以将图片转换为Bas

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

Java将时间戳转换为Date对象的方法小结

《Java将时间戳转换为Date对象的方法小结》在Java编程中,处理日期和时间是一个常见需求,特别是在处理网络通信或者数据库操作时,本文主要为大家整理了Java中将时间戳转换为Date对象的方法... 目录1. 理解时间戳2. Date 类的构造函数3. 转换示例4. 处理可能的异常5. 考虑时区问题6.

PHP执行php.exe -v命令报错的解决方案

《PHP执行php.exe-v命令报错的解决方案》:本文主要介绍PHP执行php.exe-v命令报错的解决方案,文中通过图文讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下... 目录执行phpandroid.exe -v命令报错解决方案执行php.exe -v命令报错-PHP War

基于C#实现将图片转换为PDF文档

《基于C#实现将图片转换为PDF文档》将图片(JPG、PNG)转换为PDF文件可以帮助我们更好地保存和分享图片,所以本文将介绍如何使用C#将JPG/PNG图片转换为PDF文档,需要的可以参考下... 目录介绍C# 将单张图片转换为PDF文档C# 将多张图片转换到一个PDF文档介绍将图片(JPG、PNG)转