我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

农历(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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

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

下载Word文档

猜你喜欢

php日历之儒略日计数与法国共和历法的日期间怎么相互转换

这篇文章主要介绍了php日历之儒略日计数与法国共和历法的日期间怎么相互转换,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。儒略日(Julian Day)是在儒略周期内以连续的日
2023-06-20

php中格利高里历法日期与儒略日计数相互转换的示例分析

小编给大家分享一下php中格利高里历法日期与儒略日计数相互转换的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!公历的标准名称为格里高利历,是现在国际通用的
2023-06-20

PHP中怎么转换julian天数为Jewish历法的日期

这篇文章主要介绍了PHP中怎么转换julian天数为Jewish历法的日期,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在PHP中如何利用jdtojewish()函数将儒略日
2023-06-14

PHP中怎么将儒略历法的日期转换为儒略日计数

这篇文章将为大家详细讲解有关PHP中怎么将儒略历法的日期转换为儒略日计数,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在php中,有一种方法可以将儒略历法的日期转换为儒略日计数,今天我们就来介绍一下这个算
2023-06-20

详细解析PHP中时间戳与日期格式的互相转换

PHP是一种广泛应用于Web开发领域的脚本语言,其中时间戳与日期格式的转换是开发过程中经常遇到的问题。本文将详细介绍PHP中时间戳与日期格式之间的互相转换,同时提供具体的代码示例。首先我们来了解一下时间戳和日期格式的概念:时间戳:时间戳是
详细解析PHP中时间戳与日期格式的互相转换
2024-03-09

php如何实现日期和时间戳的转换

这篇文章主要介绍“php如何实现日期和时间戳的转换”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“php如何实现日期和时间戳的转换”文章能帮助大家解决问题。将日期转换成时间戳在PHP中,我们可以通过内
2023-07-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录