广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >php实现农历公历日期的相互转换
  • 783
分享到

php实现农历公历日期的相互转换

php开发语言Poweredby金山文档 2023-08-31 08:08:29 783人浏览 独家记忆
摘要

农历(Lunar calendar)和公历(GreGorian calendar)是两种不同的日历系统。公历是基于太阳和地球的运动来计算时间的,而农历是基于月亮的运动来计算时间的。 农历中的月份是根据月亮的相对位置来确定的,而公历中的月份

农历(Lunar calendar)和公历(GreGorian calendar)是两种不同的日历系统。公历是基于太阳和地球的运动来计算时间的,而农历是基于月亮的运动来计算时间的。

农历中的月份是根据月亮的相对位置来确定的,而公历中的月份是固定的。因此,农历和公历中的月份长度是不同的。同时,农历中还有闰月的概念,这是公历中没有的。

转换农历日期到公历日期的过程需要计算农历中的每个月的长度,以及闰月的存在情况。这些信息可以通过农历算法来计算得到。反之,转换公历日期到农历日期也是同样的原理。

简单来说,农历公历日期转换原理就是利用农历算法通过计算月亮的相对位置和地球和太阳的运动来确定农历日期和公历日期之间的对应关系。

凡是涉及日历、日程的程序,或多或少会用到这一功能,本文用PHP实现农历公历日期的相互转换。

首先定义两个函数,分别为solarToLunar和lunarToSolar。

solarToLunar用于将公历转换为农历。

function solarToLunar($solarYear, $solarMonth, $solarDay) {    $lunar_date = array();    $y = $solarYear;    $m = $solarMonth;    $d = $solarDay;    $x = 0;    $dx = 0;    $l = 0;    $dl = 0;    $y = ($m == 1 || $m == 2) ? $y - 1 : $y;    $x = floor(($y - 1) / 4);    $dx = ($y - 1) % 4;    $l = floor(($y - 1) / 12);    $dl = ($y - 1) % 12;    $sum = floor(365.25 * $y) - floor(7 * $x + 2375006.5) + floor(30.6 * ($m + 1)) + $d - 1;    $sum -= floor(3 * $l + 1867216.25 / 12) - floor(($dl + 7) / 12) - floor(($dl + 11) * 30.6);    $lunar_year = floor(($sum + 7) / 291669 * 12 + 101);    $lunar_month = floor($sum / 291669 * 12 + 1) - $lunar_year * 12;    $lunar_day = $sum - floor(291669 * ($lunar_month - 1) / 12) + 1;    $lunar_date = array("year" => $lunar_year, "month" => $lunar_month, "day" => $lunar_day);    return $lunar_date;}

lunarToSolar用于将农历转换为公历。

function lunarToSolar($year, $month, $day){    $leap_month = getLeapMonth($year);    // 判断是否为闰月    if ($month < 0) {        $month = abs($month);        $is_leap_month = true;    } else {        $is_leap_month = false;    }    $lunar_days = getLunarMonthDays($year, $month);    // 计算农历距离公历元年的天数    $lunar_offset = getLunarYearDays($year) + getLunarMonthDays($year, $month) + $day - 1;    // 公历元年为1900年,每年的天数为365天或366天    $solar_year = 1900;    $solar_days = 365;    while ($lunar_offset >= $solar_days) {        $solar_year++;        $solar_days = isLeapYear($solar_year) ? 366 : 365;        $lunar_offset -= $solar_days;    }    // 根据天数计算公历月份和日期    $solar_month = 1;    while ($lunar_offset >= getSolarMonthDays($solar_year, $solar_month)) {        $lunar_offset -= getSolarMonthDays($solar_year, $solar_month);        $solar_month++;    }    $solar_day = $lunar_offset + 1;    return array($solar_year, $solar_month, $solar_day);}

下面的代码用于辅助实现日期转换。

  1. 定义天干、地支、生肖等数组

$gan = array("甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸");$zhi = array("子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥");$shengxiao = array("鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪");
  1. 利用公式计算天干地支:

$ganIndex = ($lunar_date["year"] - 3) % 10;$zhiIndex = ($lunar_date["year"] - 3) % 12;
  1. 计算生肖:

$shengxiaoIndex = ($lunar_date["year"] - 4) % 12;
  1. 将天干、地支、生肖拼接成字符串

$ganzhi = $gan[$ganIndex] . $zhi[$zhiIndex];$shengxiao = $shengxiao[$shengxiaoIndex];

以上就是实现天干地支和生肖转换的代码。

来源地址:https://blog.csdn.net/u010986241/article/details/128978195

--结束END--

本文标题: php实现农历公历日期的相互转换

本文链接: https://www.lsjlt.com/news/384935.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • php实现农历公历日期的相互转换
    农历(Lunar calendar)和公历(Gregorian calendar)是两种不同的日历系统。公历是基于太阳和地球的运动来计算时间的,而农历是基于月亮的运动来计算时间的。 农历中的月份是根据月亮的相对位置来确定的,而公历中的月份...
    99+
    2023-08-31
    php 开发语言 Powered by 金山文档
  • Python实现周日历与时间相互转换
    目录前言基本介绍使用datetime类格式化进行转换问题正确方法使用isocalendar将日期转换为周日历使用 fromisocalendar 将周日历转换为日期python代码前...
    99+
    2022-11-11
  • php日历之儒略日计数与法国共和历法的日期间怎么相互转换
    这篇文章主要介绍了php日历之儒略日计数与法国共和历法的日期间怎么相互转换,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。儒略日(Julian Day)是在儒略周期内以连续的日...
    99+
    2023-06-20
  • php中格利高里历法日期与儒略日计数相互转换的示例分析
    小编给大家分享一下php中格利高里历法日期与儒略日计数相互转换的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!公历的标准名称为格里高利历,是现在国际通用的...
    99+
    2023-06-20
  • PHP中怎么转换julian天数为Jewish历法的日期
    这篇文章主要介绍了PHP中怎么转换julian天数为Jewish历法的日期,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在PHP中如何利用jdtojewish()函数将儒略日...
    99+
    2023-06-14
  • PHP中怎么将儒略历法的日期转换为儒略日计数
    这篇文章将为大家详细讲解有关PHP中怎么将儒略历法的日期转换为儒略日计数,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在php中,有一种方法可以将儒略历法的日期转换为儒略日计数,今天我们就来介绍一下这个算...
    99+
    2023-06-20
  • php怎么实现日期和时间戳的转换
    PHP是一种流行而强大的编程语言,拥有广泛的应用。其中,日期与时间戳(timestamp)的转换也是开发者们经常需要处理的问题。本文将介绍如何将PHP中的日期转换成时间戳,以及如何将时间戳转换成日期。将日期转换成时间戳在PHP中,我们可以通...
    99+
    2023-05-14
    php时间戳 php
  • php如何实现日期和时间戳的转换
    这篇文章主要介绍“php如何实现日期和时间戳的转换”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“php如何实现日期和时间戳的转换”文章能帮助大家解决问题。将日期转换成时间戳在PHP中,我们可以通过内...
    99+
    2023-07-05
  • php实现ISO8601时间格式(带T和Z)和常规日期时间格式(东八区UTC+8)的相互转换
    ISO8601时间格式转年月日时分秒格式 要将"2023-04-06T01:44:43.000Z"这个字符串转换为年月日时分秒的格式,你可以使用PHP的DateTime类和format方法。以下是示例...
    99+
    2023-08-31
    php 开发语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作