PHP 旧暦グレゴリオ暦変換

Jul 25, 2016 am 09:09 AM

PHP 旧暦グレゴリオ暦変換
  1. /*
  2. 雲南省曲清師範大学コンピューターサイエンス工学部、Yang Haixi 著
  3. 2009-9-3
  4. */
  5. class Lunar
  6. {
  7. private $_SMDay = array (1 => 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);//グレゴリオ暦の月の日数を定義します
  8. private $_LStart = 1950;/ /旧暦は 1950 年から始まります
  9. private $_LMDay = array(
  10. //差: 旧暦の最初の月の 1 日からグレゴリオ暦の 1 月 1 日までの日数、1 ~ 12: の数太陰月の日数; 閏: 閏月がある場合、その月の通常の日数を記録します
  11. // 差 1 2 3 4 5 6 7 8 9 10 11 12 閏
  12. array(47,29,30, 30,29,30,30,29,29,30,29,30,29),
  13. 配列(36,30, 29,30,30,29,30,29,30,29,30,29,30) ,
  14. array(6,29,30,29,30,59,29,30,30,29,30,29, 30,29), //5月29日閏5月30日
  15. array(44,29,30,29) ,29,30,30,29,30,30,29,30,29),
  16. 配列(33,30 ,29,30,29,29,30,29,30,30,29,30,30),
  17. array(23,29,30,59,29,29,30,29,30,29,30,30 ,30,29), //3 月 29 日 閏 3 月 30日
  18. array(42,29,30,29, 30,29,29,30,29,30,29,30,30),
  19. 配列(30, 30,29,30,29,30,29,29,59,30,29,30,29,30) , //8月30日 閏8月29日
  20. array(48,30,30,30,29,30 ,29,29,30,29,30,29,30),
  21. array(38,29,30,30,29 ,30,29,30,29,30,29,30,29),
  22. 配列(27 ,30,29,30,29,30,59,30,29,30,29,30,29,30), //6月30日 閏6月29日
  23. array(45,30,29,30,29, 30,29,30,30,29,30,29,30),
  24. array(35,29,30,29,29, 30,29,30,30,29,30,30,29),
  25. 配列( 24,30,29,30,58,30,29,30,29,30,30,30,29,29), / /4月29日 閏4月29日
  26. array(43,30,29,30,29 ,29,30,29,30,29,30,30,30),
  27. array(32,29,30,29,30,29 ,29,30,29,29,30,30,29),
  28. 配列 (20,30,30,59,30,29,29,30,29,29,30,30,29,30), // 3月30日 閏3月29日
  29. array(39,30,30,29, 30,30,29,29,30,29,30,29,30),
  30. array(29,29,30,29,30,30, 29,59,30,29,30,29,30,30) , //7月30日 閏7月29日
  31. array(47,29,30,29,30,29,30,30,29,30,29,30 ,29)、
  32. 配列(36,30,29,29 ,30,29,30,30,29,30,30,29,30),
  33. 配列(26,29,30,29,29,59,30 ,29,30,30,30,29,30,30 ), //5月30日閏5月29日
  34. array(45,29,30,29,29,30,29,30,29,30,30,29, 30)、
  35. 配列(33,30,29, 30,29,29,30,29,29,30,30,29,30),
  36. 配列(22,30,30,29,59,29,30, 29,29,30,30,29,30, 30), //4月30日 閏4月29日
  37. array(41,30,30,29,30,29,29,30,29,29,30,29,30 ),
  38. array(30,30,30 ,29,30,29,30,29,59,29,30,29,30,30), //8 月 30 日 閏 8 月 29 日
  39. array(48,30,29, 30,30,29,30, 29,30,29,30,29,29),
  40. 配列(37,30,29,30,30,29,30,30,29,30,29,30,29) ,
  41. array(27,30, 29,29,30,29,60,29,30,30,29,30,29,30), //6 月 30 日 閏 6 月 30日
  42. array(46,30,29,29) ,30,29,30 ,29,30,30,29,30,30),
  43. 配列(35,29,30,29,29,30,29,29,30,30,29,30,30),
  44. array(24,30 ,29,30,58,30,29,29,30,29,30,30,30,29), //4 月 29 日 閏 4 月 29 日
  45. array(43,30,29,30, 29,29, 30,29,29,30,29,30,30),
  46. 配列(32,30,29,30,30,29,29,30,29,29,59,30,30,30) , //10 月 30 閏 10 月 29 日
  47. array(50,29,30,30,29,30,29,30,29,29,30,29,30),
  48. array(39,29,30,30, 29,30 ,30,29,30,29,30,29,29),
  49. 配列(28,30,29,30,29,30,59,30,30,29,30,29,29,30) , // 6月30日 閏6月29日
  50. array(47,30,29,30,29,30,29,30,30,29,30,30,29),
  51. array(36,30,29,29,30 、29,30,29,30,29,30,30,30),
  52. 配列(26,29,30,29,29,59,29,30,29,30,30,30,30,30), / /5月30日 閏5月29日
  53. array(45,29,30,29,29,30,29,29,30,29,30,30,30),
  54. array(34,29,30,30,29 , 29,30,29,29,30,29,30,30),
  55. 配列(22,29,30,59,30,29,30,29,29,30,29,30,29,30), / /3月30日 閏3月29日
  56. array(40,30,30,30,29,30,29,30,29,29,30,29,30),
  57. array(30,29,30,30, 29,30 ,29,30,59,29,30,29,30,30), //8月30日閏8月29日
  58. array(49,29,30,29,30,30,29,30,29 ,30,30, 29,29)、
  59. 配列(37,30,29,30,29,30,29,30,30,29,30,30,29),
  60. 配列(27,30,29,29,30,58, 30,30,29,30,30,29,30,29), //5月29日 閏5月29日
  61. array(46,30,29,29,30,29,29,30, 29,30,30,30 ,29)、
  62. 配列(35,30,30,29,29,30,29,29,30,29,30,30,29),
  63. 配列(23,30,30,29,59,30,29 ,29,30,29,30,29,30,30), //4月30日 閏4月29日
  64. array(42,30,30,29,30,29,30,29 ,29,30,29,30, 29)、
  65. 配列(31,30,30,29,30,30,29,30,29,29,30,29,30),
  66. 配列(21,29,59 ,30,30,29,30, 29,30,29,30,29,30,30), //2月30日 閏2月29日
  67. array(39,29,30,29,30,29,30, 30,29,30,29,30,29 ),
  68. array(28,30,29,30,29,30,29,59,30,30,29,30,30,30), //7月30日閏7月29日
  69. array(48,29,29, 30,29,29,30,29,30,30,30,29,30),
  70. 配列(37,30,29,29,30,29,29 ,30,29,30,30,29,30) ,
  71. array(25,30,30,29,29,59,29,30,29,30,29,30,30,30), //5月30日閏5月29日
  72. array(44,30,29,30) ,29,30,29,29,30,29,30,29,30),
  73. 配列(33,30,29,30,30,29, 30,29,29,30,29,30,29),
  74. array(22,30,29,30,59,30,29,30,29,30,29,30,29,30), //4月30閏4月29日
  75. array(40,30,29,30) ,29,30,30,29,30,29,30,29,30),
  76. 配列(30,29,30,29,30,29 ,30,29,30,59,30,29,30,30 ), //9月30日閏9月29日
  77. 配列(49,29,30,29,29,30,29,30,30,30,29,30,29),
  78. 配列(38,30,29,30,29,29,30,29,30, 30,29,30,30),
  79. array(27,29,30,29,30,29,59,29,30,29,30,30,30,29), //6 月 29 日 閏 6 月 30 日
  80. 配列(46,29,30,29,30,29,29,30,29,30,29,30,30),
  81. 配列(35,30,29,30,29,30,29,29,30 ,29 ,29,30,30),
  82. array(24,29,30,30,59,30,29,29,30,29,30,29,30,30), //4月30日閏4月29日
  83. array( 42,29,30,30,29,30,29,30,29,30,29,30,29),
  84. 配列(31,30,29,30,29,30,30,29, 30,29, 30,29,30),
  85. array(21,29,59,29,30,30,29,30,30,29,30,29,30,30), //2月30日閏日月29
  86. array( 40,29,30,29,29,30,29,30,30,29,30,30,29),
  87. 配列(28,30,29,30,29,29,59,30 ,29,30, 30,30,29,30), //6月30日 閏6月29日
  88. array(47,30,29,30,29,29,30,29,29,30,30,30, 29),
  89. array(36) ,30,30,29,30,29,29,30,29,29,30,30,29),
  90. 配列(25,30,30,30,29,59,29, 30,29,29,30 ,30,29,30), //5月30日閏5月29日
  91. array(43,30,30,29,30,29,30,29,30,29,29,30 ,30),
  92. array(33, 29,30,29,30,30,29,30,29,30,29,30,29),
  93. 配列(22,29,30,59,30,29,30 ,30,29,30,29, 30,29,30), //3月30日 閏3月29日
  94. array(41,30,29,29,30,29,30,30,29,30,30, 29,30),
  95. array(30,29) ,30,29,29,30,29,30,29,30,30,59,30,30), //11月30日閏11月29日
  96. 配列(49,29,30,29,29,30,29, 30,29,30,30,29,30),
  97. 配列(38,30,29,30,29,29,30,29,29,30 ,30,29,30),
  98. 配列(27,30, 30,29,30,29,59,29,29,30,29,30,30,29), //6月29日閏6月30日
  99. array(45,30,30,29,30,29,29,30 ,29,29,30,29,30),
  100. 配列(34,30,30,29,30,29,30,29,30, 29,29,30,29),
  101. 配列(23,30,30 ,29,30,59,30,29,30,29,30,29,29,30), //5月30日 閏5月29日
  102. array(42,30,29,30,30,29,30,29, 30,30,29,30,29)、
  103. 配列(31,29,30,29,30,29,30,30,29 ,30,30,29,30),
  104. 配列(21,29,59, 29,30,29,30,29,30,30,29,30,30,30), //2月30日閏2月29日
  105. array(40,29,30,29,29,30,29,29,30 ,30,29,30,30),
  106. array(29,30,29,30,29,29,30,58, 30,29,30,30,30,29), //7月29日閏7月29日
  107. 配列(47,30,29,30,29,29,30,29,29,30,29,30,30 ),
  108. 配列(36,30,29,30,29,30,29,30,29, 29,30,29,30),
  109. array(25,30,29,30,30,59,29,30 ,29,29,30,29,30,29), //5月29日閏5月30日
  110. 配列(44,29,30,30,29,30,30,29,30,29,29,30,29),
  111. 配列(32,30,29,30,29,30,30,29,30,30 ,29,30,29),
  112. array(22,29,30,59,29,30,29, 30,30,29,30,30,29,29), //3 月 29 日 閏 3 月 30 日
  113. );
  114. //閏年かどうか
  115. private function IsLeap Year($A Year){
  116. return ($Ayear % 4 == 0) && (($Ayear % 100 != 0) || ($Ayear % 400 == 0) ));
  117. }
  118. //グレゴリオ暦の月の日数 (年: 年; 月: 月)
  119. プライベート関数 GetSMon( $year,$month)
  120. {
  121. if($this->IsLeap Year ($year) && $month == 2)
  122. return 29;
  123. else
  124. return $this->_SMDay[$month];
  125. }
  126. //旧暦名変換
  127. private function LyearName($year)
  128. {
  129. $Name = array("ゼロ"、"一"、"二"、"三"、"四"、"五"、"六"、"七"、"八"、"九");
  130. for($ i=0;$i for($k=0;$k if($year[ $i]==$k)
  131. $tmp.=$Name[ $k];
  132. return $tmp;
  133. }
  134. プライベート関数 LMonName($month)
  135. {
  136. if($month >=1 && $month <=12 )
  137. {
  138. $Name = array( 1=> ;"正"、"二"、"三"、"四"、"五"、"六"、"七"、"八"、"九"、"十"、"十一"、"十二");
  139. return $Name[$month];
  140. }
  141. return $month;
  142. }
  143. プライベート関数 LDayName($day)
  144. {
  145. if( $day >=1 && $day <=30 )
  146. {
  147. $ Name = array( 1 =>
  148. "中学1日目"、"中学2日目"、"中学3日目"、"中学4日目"、"中学5日目"高校" "、"旧月 6 日"、"旧月 7 日"、"旧月 8 日"、"旧月 9 日"、"旧月 10 日"旧暦の月"、
  149. "十一"、"十二"、"十三"、"十四"、"十"、"五"、"十六"、"十七"、"十八"、"十九"、"二十"、
  150. " 21」、「22」、「23」、「24」、「」、「25」、「26」、「27」、「28」、「20」 -nine", "Thirty"
  151. );
  152. return $Name[$day];
  153. }
  154. return $day;
  155. }
  156. //グレゴリオ暦を旧暦に変換します (Sdate: グレゴリオ暦の日付)
  157. public function S2L($date)
  158. {
  159. list($year, $month, $day) =explode("-", $date);
  160. if($ year <= 1951 || $month <= 0 || $day <= 0 || $year >= 2051 ) return false;
  161. //クエリ日からの日数を取得します。今年の 1 月 1 日
  162. $date1 = strtotime($year."-01-01");//今年の 1 月 1 日
  163. $date2 = strtotime($year."-".$month."-" .$day);
  164. $days=round (($date2-$date1)/3600/24);
  165. $days += 1;
  166. // 対応する年間太陰暦データを取得し、配列 Larray に変換します
  167. $ Larray = $this->_LMDay[$year - $this- >_LStart];
  168. if($days <= $Larray[0])
  169. {
  170. $Lyear = $year - 1;
  171. $days = $ Larray[0] - $days;
  172. $Larray = $this- >_LMDay[$Lyear - $this->_LStart];
  173. if($days < $Larray[12])
  174. {
  175. $Lmonth = 12 ;
  176. $Lday = $Larray[12] - $days;
  177. }
  178. else
  179. {
  180. $Lmonth = 11;
  181. $days = $days - $Larray[12];
  182. $Lday = $Larray[11] - $ days;
  183. }
  184. }
  185. else
  186. {
  187. $Lyear = $ year;
  188. $days = $days - $Larray[0];
  189. for($i = 1;$i <= 12;$i++)
  190. {
  191. if($days > $Larray[$i]) $ days = $days - $Larray[$i];
  192. else
  193. {
  194. if ($days > 30){
  195. $days = $days - $Larray [13];
  196. $Ltype = 1;
  197. }
  198. $ Lmonth = $i;
  199. $Lday = $days;
  200. Break;
  201. }
  202. }
  203. }
  204. return mktime(0, 0, 0, $Lmonth, $ Lday, $Lyear);
  205. //$Ldate = $Lyear. "-".$Lmonth."-".$Lday;
  206. //$Ldate = $this->LyearName($Lyear)." Year". $this->LMonName($Lmonth)."Month". $this->LDayName($Lday);
  207. //if($Ltype) $Ldate.="(Leap)";
  208. //return $Ldate ;
  209. }
  210. //旧暦をグレゴリオ暦に変換します (日付: 旧暦; タイプ: 閏月かどうか)
  211. public function L2S($date,$type = 0)
  212. {
  213. list($year, $month , $day) = split("-",$date);
  214. if($year < = 1951 || $month <= 0 || $day <= 0 || $year >= 2051 ) return false;
  215. $Larray = $this->_LMDay[$year - $this->_LStart ];
  216. if($type == 1 && count($Larray)<=12 ) return false;//リクエスト閏月をクエリしますが、閏月が見つかりません
  217. //クエリ対象の太陰暦が閏月で、その年の太陰暦配列に閏月が含まれる場合 データを取得します
  218. if($Larray[$month]>30 && $type == 1 && count($Larray) >=13) $day = $Larray[13] + $day;
  219. //年を取得 旧暦の日付からグレゴリオ暦の 1 月 1 日までの日数
  220. $days = $day;
  221. for($i=0;$i $days += $Larray[$i];
  222. //旧暦の日付をクエリする場合は、グレゴリオ暦の 1 月 1 日からの 1 年
  223. if($days > 366 || ($this->GetSMon($month,2)!=29 && $days>365 ))
  224. {
  225. $Syear = $year +1;
  226. if($this->GetSMon($month,2)!=29)
  227. $days-=366;
  228. else
  229. $days-=365;
  230. if($days > $this-> _SMDay[1])
  231. {
  232. $Smonth = 2;
  233. $Sday = $days - $this->_SMDay[1];
  234. }
  235. else
  236. {
  237. $Smonth = 1;
  238. $Sday = $days;
  239. }
  240. }
  241. else
  242. {
  243. $Syear =$year;
  244. for($i=1;$i<=12;$i++)
  245. {
  246. if($days > $this- >GetSMon($Syear, $i))
  247. $days-=$this->GetSMon($Syear,$i);
  248. else
  249. {
  250. $Smonth = $i;
  251. $Sday = $days;
  252. ブレーク ;
  253. }
  254. }
  255. }
  256. return mktime(0, 0, 0, $Smonth, $Sday, $Syear);
  257. //$Sdate = $Syear."-".$Smonth."-".$Sday
  258. //return $Sdate;
  259. }
  260. }
  261. ?>
コードをコピー
  1. require_once 'Lunar.php';
  2. $today = date("Y-m-d");
  3. $lunar = new Lunar();
  4. //グレゴリオ暦から太陰暦へ
  5. $nl = date( "Y-m-d" ",$lunar->S2L($today));
  6. //太陰暦をグレゴリオ暦に変換します
  7. $gl = date("Y-m-d",$lunar->L2S($nl));
  8. echo "今日のグレゴリオ暦は: $ today
    ";
  9. echo "太陰暦への変換は: $nl
    ";
  10. echo "グレゴリオ暦への変換は: $gl
    ";
  11. ?>
コードをコピー


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

PHPにおける後期静的結合の概念を説明します。 PHPにおける後期静的結合の概念を説明します。 Mar 21, 2025 pm 01:33 PM

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

フレームワークセキュリティ機能:脆弱性から保護します。 フレームワークセキュリティ機能:脆弱性から保護します。 Mar 28, 2025 pm 05:11 PM

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 Mar 28, 2025 pm 05:12 PM

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。

PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? Apr 01, 2025 pm 03:12 PM

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。

See all articles