当前位置:网站首页>Apprendre le Code de la méthode de conversion du calendrier lunaire grégorien en utilisant PHP
Apprendre le Code de la méthode de conversion du calendrier lunaire grégorien en utilisant PHP
2022-07-02 15:06:00 【Je me souviens de Yu Fei.】
Apprendre à utiliserphpCode de méthode pour réaliser la conversion du calendrier grégorien
Classe de conversion du calendrier d'encapsulation
Fichiers de classe:lunar.class.php
<?php
class Lunar
{
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)
);
/** * Convertir le calendrier solaire en calendrier lunaire * @param year Calendrier grégorien-Année * @param month Calendrier grégorien-Mois * @param date Calendrier grégorien-Jour */
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, 'Premier mois', 'Première année', 'Xin Mao', 1, 1, 'Lapins');
}
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, 'Premier mois', 'Première année', 'Xin Mao', 1, 1, 'Lapins');
}
$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;
}
/** * Convertir le calendrier lunaire en calendrier solaire * @param year Calendrier lunaire-Année * @param month Calendrier lunaire-Mois, Traitement des mois bissextiles : Par exemple, si le mois de mai bissextile , Le deuxième mai passe en juin , C'est comme si le calendrier lunaire avait 13Mois, C'est juste que parfois 13 Le nombre de jours par mois est de 0 * @param date Calendrier lunaire-Jour */
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);
}
/** * Pour déterminer si c'est une année bissextile * @param year */
function isLeapYear($year)
{
return (($year % 4 == 0 && $year % 100 != 0) || ($year % 400 == 0));
}
/** * Obtenir l'année de la branche sèche * @param year */
function getLunarYearName($year)
{
$sky = array('Geng.', 'Sin.', 'Union', 'C'est vrai.', 'A', 'B', 'C', 'D', 'E', 'Je');
$earth = array('Shin!', 'Unit é', '?', 'Hai', 'Ko', 'Laid.', 'C', 'D', 'Chen', 'Oui.', 'Après - midi', 'Non.');
$year = $year . '';
return $sky[$year{
3}] . $earth[$year % 12];
}
/** * Obtenez le zodiaque selon l'année lunaire * @param year Année lunaire */
function getYearZodiac($year)
{
$zodiac = array('Singe', 'Poulets', 'Les chiens.', 'Porcs', 'Rat', 'Bovins', 'Tigre', 'Lapins', 'Dragon', 'Un serpent.', 'Chevaux', 'Moutons');
return $zodiac[$year % 12];
}
/** * Obtenir le nombre de jours du mois solaire * @param year Calendrier grégorien-Année * @param month Calendrier grégorien-Mois */
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"];
}
/** * Obtenir le nombre de jours du mois lunaire * @param year Calendrier lunaire-Année * @param month Calendrier lunaire-Mois,Depuis janvier */
function getLunarMonthDays($year, $month)
{
$monthData = $this->getLunarMonths($year);
return $monthData[$month - 1];
}
/** * Obtenir un tableau des jours du mois lunaire * @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;
}
/** * Obtenir le nombre de jours par an pour le calendrier lunaire * @param year Année lunaire */
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;
}
/** * Obtenir le mois bissextile * @param year Année lunaire */
function getLeapMonth($year)
{
$yearData = $this->lunarInfo[$year - $this->MIN_YEAR];
return $yearData[0];
}
/** * Calculer le nombre de jours entre la date du calendrier lunaire et le premier jour du premier mois * @param year http://www.codetc.com/ * @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;
}
/** * Calcul2 Jours entre les dates du calendrier solaire * @param year Année civile * @param cmonth * @param cdate * @param dmonth Mois lunaire correspondant au premier mois lunaire * @param ddate Nombre de jours du calendrier solaire correspondant au premier jour du calendrier lunaire */
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);
}
/** * Calculer la date du calendrier lunaire en fonction du nombre de jours depuis le premier jour du premier mois du mois * @param year Année civile * @param between Nombre de jours */
function getLunarByBetween($year, $between)
{
//debugger;
$lunarArray = array();
$yearMonth = array();
$t = 0;
$e = 0;
$leapMonth = 0;
$m = '';
if ($between == 0) {
array_push($lunarArray, $year, 'Premier mois', 'Première année');
$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) ? ('Bissextile' . $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));// Tiangan Ground Branch
array_push($lunarArray, $t, $e);
array_push($lunarArray, $this->getYearZodiac($year));// 12Le zodiaque
array_push($lunarArray, $leapMonth);// Mois bissextiles
return $lunarArray;
}
/** * .Obtenez le nom du calendrier lunaire du nombre * @param num Nombre * @param isMonth Est - ce le nombre de mois */
function getCapitalNum($num, $isMonth)
{
$isMonth = $isMonth || false;
$dateHash = array('0' => '', '1' => 'Un.', '2' => '2.', '3' => 'Trois', '4' => 'Quatre', '5' => 'Cinq', '6' => 'Six', '7' => 'Sept', '8' => 'Huit', '9' => 'Neuf', '10' => 'Dix ');
$monthHash = array('0' => '', '1' => 'Premier mois', '2' => 'Février', '3' => 'Mars', '4' => 'Avril', '5' => 'Mai', '6' => 'Juin', '7' => 'Juillet', '8' => 'Août', '9' => 'Septembre', '10' => 'Octobre', '11' => 'Lune d'hiver', '12' => 'La lune.');
$res = '';
if ($isMonth) {
$res = $monthHash[$num];
} else {
if ($num <= 10) {
$res = 'Début' . $dateHash[$num];
} else if ($num > 10 && $num < 20) {
$res = 'Dix' . $dateHash[$num - 10];
} else if ($num == 20) {
$res = "Vingt.";
} else if ($num > 20 && $num < 30) {
$res = "Vingt." . $dateHash[$num - 20];
} else if ($num == 30) {
$res = "30.";
}
}
return $res;
}
}
?>
Classe de référence
Nouveau fichier lunardate.php
<?php
header("Content-Type:text/html;charset=utf-8");
require "lunar.class.php";
echo 'La date actuelle est' . $day = '2022-06-28';
echo '<br>';
$lunar = new Lunar();
$month = $lunar->convertSolarToLunar(2022, 06, 28);// Convertir le calendrier solaire en calendrier lunaire
echo '<pre>';
print_r($month);
?>
Imprimer les résultats
La date actuelle est2022-06-28
Array
(
[0] => 2022
[1] => Mai
[2] => 30.
[3] => Yonyin
[4] => 5
[5] => 30
[6] => Tigre
[7] => 0
)
边栏推荐
- 學習使用php實現公曆農曆轉換的方法代碼
- buuctf-pwn write-ups (7)
- [noi simulation] Elis (greedy, simulation)
- Implementation of n queen in C language
- Key points of compilation principle examination in 2021-2022 academic year [overseas Chinese University]
- Large top heap, small top heap and heap sequencing
- 使用mathtype编辑公式,复制粘贴时设置成仅包含mathjax语法的公式
- [C language] explain the initial and advanced levels of the pointer and points for attention (1)
- Jenkins Pipeline 应用与实践
- Have you learned the wrong usage of foreach
猜你喜欢

Actual combat sharing of shutter screen acquisition

Advanced C language (learn malloc & calloc & realloc & free in simple dynamic memory management)

Yolov6 training: various problems encountered in training your dataset

Factal: Unsafe repository is owned by someone else Solution

可视化搭建页面工具的前世今生

Table responsive layout tips

Fatal: unsafe repository is owned by someone else

一张图彻底掌握prototype、__proto__、constructor之前的关系(JS原型、原型链)

btrace-(字节码)动态跟踪工具

LeetCode 2310. The number of digits is the sum of integers of K
随机推荐
Why can't programmers who can only program become excellent developers?
AtCoder Beginner Contest 254
[untitled] leetcode 2321 Maximum score of concatenated array
数据库内容输出有问题怎么解决
2021-2022學年編譯原理考試重點[華僑大學]
Base64 编码原来还可以这么理解
Thoroughly master prototype__ proto__、 Relationship before constructor (JS prototype, prototype chain)
传感器数据怎么写入电脑数据库
编译原理课程实践——实现一个初等函数运算语言的解释器或编译器
【C语音】详解指针进阶和注意点(2)
Table responsive layout tips
[C language] explain the initial and advanced levels of the pointer and points for attention (1)
qml 弹窗框架,可定制
报错:npm WARN config global `--global`, `--local` are deprecated. Use `--location=global` instead.
Base64 coding can be understood this way
【apipost】使用教程
The past and present lives of visual page building tools
Makefile separates file names and suffixes
可视化搭建页面工具的前世今生
C language exercises - (array)