この記事では、太陽暦から旧暦への変換を実装するPHPクラスについて説明します。参考のためにみんなで共有してください。詳細は以下の通りです
コードをコピーします コードは次のとおりです:
//PHP 太陽暦を太陰暦に変換するクラス
クラスカレンダー
{
//旧暦の各月の日数
var $everyCMonth=array(
0=>配列(8,0,0,0,0,0,0,0,0,0,0,0,29,30,7,1),
1=>配列(0,29,30,29,29,30,29,30,29,30,30,30,29,0,8,2),
2=>配列(0,30,29,30,29,29,30,29,30,29,30,30,30,0,9,3),
3=>配列(5,29,30,29,30,29,29,30,29,29,30,30,29,30,10,4),
4=>配列(0,30,30,29,30,29,29,30,29,29,30,30,29,0,1,5),
5=>配列(0,30,30,29,30,30,29,29,30,29,30,29,30,0,2,6),
6=>配列(4,29,30,30,29,30,29,30,29,30,29,30,29,30,3,7),
7=>配列(0,29,30,29,30,29,30,30,29,30,29,30,29,0,4,8),
8=>配列(0,30,29,29,30,30,29,30,29,30,30,29,30,0,5,9),
9=>配列(2,29,30,29,29,30,29,30,29,30,30,30,29,30,6,10),
10=>配列(0,29,30,29,29,30,29,30,29,30,30,30,29,0,7,11),
11=>配列(6,30,29,30,29,29,30,29,29,30,30,29,30,30,8,12),
12=>配列(0,30,29,30,29,29,30,29,29,30,30,29,30,0,9,1),
13=>配列(0,30,30,29,30,29,29,30,29,29,30,29,30,0,10,2),
14=>配列(5,30,30,29,30,29,30,29,30,29,30,29,29,30,1,3),
15=>配列(0,30,29,30,30,29,30,29,30,29,30,29,30,0,2,4),
16=>配列(0,29,30,29,30,29,30,30,29,30,29,30,29,0,3,5),
17=>配列(2,30,29,29,30,29,30,30,29,30,30,29,30,29,4,6),
18=>配列(0,30,29,29,30,29,30,29,30,30,29,30,30,0,5,7),
19=>配列(7,29,30,29,29,30,29,29,30,30,29,30,30,30,6,8),
20=>配列(0,29,30,29,29,30,29,29,30,30,29,30,30,0,7,9),
21=>配列(0,30,29,30,29,29,30,29,29,30,29,30,30,0,8,10),
22=>配列(5,30,29,30,30,29,29,30,29,29,30,29,30,30,9,11),
23=>配列(0,29,30,30,29,30,29,30,29,29,30,29,30,0,10,12),
24=>配列(0,29,30,30,29,30,30,29,30,29,30,29,29,0,1,1),
25=>配列(4,30,29,30,29,30,30,29,30,30,29,30,29,30,2,2),
26=>配列(0,29,29,30,29,30,29,30,30,29,30,30,29,0,3,3),
27=>配列(0,30,29,29,30,29,30,29,30,29,30,30,30,0,4,4),
28=>配列(2,29,30,29,29,30,29,29,30,29,30,30,30,30,5,5),
29=>配列(0,29,30,29,29,30,29,29,30,29,30,30,30,0,6,6),
30=>配列(6,29,30,30,29,29,30,29,29,30,29,30,30,29,7,7),
31=>配列(0,30,30,29,30,29,30,29,29,30,29,30,29,0,8,8),
32=>配列(0,30,30,30,29,30,29,30,29,29,30,29,30,0,9,9),
33=>配列(5,29,30,30,29,30,30,29,30,29,30,29,29,30,10,10),
34=>配列(0,29,30,29,30,30,29,30,29,30,30,29,30,0,1,11),
35=>配列(0,29,29,30,29,30,29,30,30,29,30,30,29,0,2,12),
36=>配列(3,30,29,29,30,29,29,30,30,29,30,30,30,29,3,1),
37=>配列(0,30,29,29,30,29,29,30,29,30,30,30,29,0,4,2),
38=>配列(7,30,30,29,29,30,29,29,30,29,30,30,29,30,5,3),
39=>配列(0,30,30,29,29,30,29,29,30,29,30,29,30,0,6,4),
40=>配列(0,30,30,29,30,29,30,29,29,30,29,30,29,0,7,5),
41=>配列(6,30,30,29,30,30,29,30,29,29,30,29,30,29,8,6),
42=>配列(0,30,29,30,30,29,30,29,30,29,30,29,30,0,9,7),
43=>配列(0,29,30,29,30,29,30,30,29,30,29,30,29,0,10,8),
44=>配列(4,30,29,30,29,30,29,30,29,30,30,29,30,30,1,9),
45=>配列(0,29,29,30,29,29,30,29,30,30,30,29,30,0,2,10),
46=>配列(0,30,29,29,30,29,29,30,29,30,30,29,30,0,3,11),
47=>配列(2,30,30,29,29,30,29,29,30,29,30,29,30,30,4,12),
48=>配列(0,30,29,30,29,30,29,29,30,29,30,29,30,0,5,1),
49=>配列(7,30,29,30,30,29,30,29,29,30,29,30,29,30,6,2),
50=>配列(0,29,30,30,29,30,30,29,29,30,29,30,29,0,7,3),
51=>配列(0,30,29,30,30,29,30,29,30,29,30,29,30,0,8,4),
52=>配列(5,29,30,29,30,29,30,29,30,30,29,30,29,30,9,5),
53=>配列(0,29,30,29,29,30,30,29,30,30,29,30,29,0,10,6),
54=>配列(0,30,29,30,29,29,30,29,30,30,29,30,30,0,1,7),
55=>配列(3,29,30,29,30,29,29,30,29,30,29,30,30,30,2,8),
56=>配列(0,29,30,29,30,29,29,30,29,30,29,30,30,0,3,9),
57=>配列(8,30,29,30,29,30,29,29,30,29,30,29,30,29,4,10),
58=>配列(0,30,30,30,29,30,29,29,30,29,30,29,30,0,5,11),
59=>配列(0,29,30,30,29,30,29,30,29,30,29,30,29,0,6,12),
60=>配列(6,30,29,30,29,30,30,29,30,29,30,29,30,29,7,1),
61=>配列(0,30,29,30,29,30,29,30,30,29,30,29,30,0,8,2),
62=>配列(0,29,30,29,29,30,29,30,30,29,30,30,29,0,9,3),
63=>配列(4,30,29,30,29,29,30,29,30,29,30,30,30,29,10,4),
64=>配列(0,30,29,30,29,29,30,29,30,29,30,30,30,0,1,5),
65=>配列(0,29,30,29,30,29,29,30,29,29,30,30,29,0,2,6),
66=>配列(3,30,30,30,29,30,29,29,30,29,29,30,30,29,3,7),
67=>配列(0,30,30,29,30,30,29,29,30,29,30,29,30,0,4,8),
68=>配列(7,29,30,29,30,30,29,30,29,30,29,30,29,30,5,9),
69=>配列(0,29,30,29,30,29,30,30,29,30,29,30,29,0,6,10),
70=>配列(0,30,29,29,30,29,30,30,29,30,30,29,30,0,7,11),
71=>配列(5,29,30,29,29,30,29,30,29,30,30,30,29,30,8,12),
72=>配列(0,29,30,29,29,30,29,30,29,30,30,29,30,0,9,1),
73=>配列(0,30,29,30,29,29,30,29,29,30,30,29,30,0,10,2),
74=>配列(4,30,30,29,30,29,29,30,29,29,30,30,29,30,1,3),
75=>配列(0,30,30,29,30,29,29,30,29,29,30,29,30,0,2,4),
76=>配列(8,30,30,29,30,29,30,29,30,29,29,30,29,30,3,5),
77=>配列(0,30,29,30,30,29,30,29,30,29,30,29,29,0,4,6),
78=>配列(0,30,29,30,30,29,30,30,29,30,29,30,29,0,5,7),
79=>配列(6,30,29,29,30,29,30,30,29,30,30,29,30,29,6,8),
80=>配列(0,30,29,29,30,29,30,29,30,30,29,30,30,0,7,9),
81=>配列(0,29,30,29,29,30,29,29,30,30,29,30,30,0,8,10),
82=>配列(4,30,29,30,29,29,30,29,29,30,29,30,30,30,9,11),
83=>配列(0,30,29,30,29,29,30,29,29,30,29,30,30,0,10,12),
84=>配列(10,30,29,30,30,29,29,30,29,29,30,29,30,30,1,1),
85=>配列(0,29,30,30,29,30,29,30,29,29,30,29,30,0,2,2),
86=>配列(0,29,30,30,29,30,30,29,30,29,30,29,29,0,3,3),
87=>配列(6,30,29,30,29,30,30,29,30,30,29,30,29,29,4,4),
88=>配列(0,30,29,30,29,30,29,30,30,29,30,30,29,0,5,5),
89=>配列(0,30,29,29,30,29,29,30,30,29,30,30,30,0,6,6),
90=>配列(5,29,30,29,29,30,29,29,30,29,30,30,30,30,7,7),
91=>配列(0,29,30,29,29,30,29,29,30,29,30,30,30,0,8,8),
92=>配列(0,29,30,30,29,29,30,29,29,30,29,30,30,0,9,9),
93=>配列(3,29,30,30,29,30,29,30,29,29,30,29,30,29,10,10),
94=>配列(0,30,30,30,29,30,29,30,29,29,30,29,30,0,1,11),
95=>配列(8,29,30,30,29,30,29,30,30,29,29,30,29,30,2,12),
96=>配列(0,29,30,29,30,30,29,30,29,30,30,29,29,0,3,1),
97=>配列(0,30,29,30,29,30,29,30,30,29,30,30,29,0,4,2),
98=>配列(5,30,29,29,30,29,29,30,30,29,30,30,29,30,5,3),
99=>配列(0,30,29,29,30,29,29,30,29,30,30,30,29,0,6,4),
100=>配列(0,30,30,29,29,30,29,29,30,29,30,30,29,0,7,5),
101=>配列(4,30,30,29,30,29,30,29,29,30,29,30,29,30,8,6),
102=>配列(0,30,30,29,30,29,30,29,29,30,29,30,29,0,9,7),
103=>配列(0,30,30,29,30,30,29,30,29,29,30,29,30,0,10,8),
104=>配列(2,29,30,29,30,30,29,30,29,30,29,30,29,30,1,9),
105=>配列(0,29,30,29,30,29,30,30,29,30,29,30,29,0,2,10),
106=>配列(7,30,29,30,29,30,29,30,29,30,30,29,30,30,3,11),
107=>配列(0,29,29,30,29,29,30,29,30,30,30,29,30,0,4,12),
108=>配列(0,30,29,29,30,29,29,30,29,30,30,29,30,0,5,1),
109=>配列(5,30,30,29,29,30,29,29,30,29,30,29,30,30,6,2),
110=>配列(0,30,29,30,29,30,29,29,30,29,30,29,30,0,7,3),
111=>配列(0,30,29,30,30,29,30,29,29,30,29,30,29,0,8,4),
112=>配列(4,30,29,30,30,29,30,29,30,29,30,29,30,29,9,5),
113=>配列(0,30,29,30,29,30,30,29,30,29,30,29,30,0,10,6),
114=>配列(9,29,30,29,30,29,30,29,30,30,29,30,29,30,1,7),
115=>配列(0,29,30,29,29,30,29,30,30,30,29,30,29,0,2,8),
116=>配列(0,30,29,30,29,29,30,29,30,30,29,30,30,0,3,9),
117=>配列(6,29,30,29,30,29,29,30,29,30,29,30,30,30,4,10),
118=>配列(0,29,30,29,30,29,29,30,29,30,29,30,30,0,5,11),
119=>配列(0,30,29,30,29,30,29,29,30,29,29,30,30,0,6,12),
120=>配列(4,29,30,30,30,29,30,29,29,30,29,30,29,30,7,1)
);
//旧暦天幹
var $mten=array("null","A","B","C","D","W","Ji","G","Xin","Ren","癸") ; //太陰暦の地球の枝
var $mtwelve=array("null","子(ネズミ)","チョウ(牛)","陰(トラ)","卯(ウサギ)","陈(龙)",
「Si(蛇)」、「Wu(馬)」、「Wei(羊)」、「Shen(猿)」、「You(鶏)」、「Xu(犬)」、「Hai(豚)」)。 //旧暦の月
var $mmonth=array("闰","正","二","三","四","五","六",
「セブン」、「エイト」、「ナイン」、「テン」、「イレブン」、「十二」、「月」);
var $mday=array("null","1日目","2日目","3日目","4日目","5日目","6日目","7日目","8日目", 「旧暦9日」、「旧暦10日」
「イレブン」、「十二」、「十三」、「十四」、「十五」、「十六」、「十七」、「十八」、「十九」、「二十」、
「21」、「22」、「23」、「24」、「25」、「26」、「27」、「28」、「20」 -9", "30") ;//旧暦の日
//初期値を代入
//天の幹と地の枝
var $ten=0;
var $twelve=0;
関数 MyPub($c Year,$cMonth,$cDay)
{
$total=11;//1900 年 12 月 21 日までのグレゴリオ暦の合計日数
$mtotal=0;//旧暦の合計日数
($y=1901;$y
{
$total+=365;
if ($y%4==0) $total ++;
}
// 今年の数か月を追加します
スイッチ ($cMonth){
ケース 12:
$total+=30;
ケース 11:
$total+=31;
ケース 10:
$total+=30;
ケース9:
$total+=31;
ケース8:
$total+=31;
ケース7:
$total+=30;
ケース6:
$total+=31;
ケース5:
$total+=30;
ケース 4:
$total+=31;
ケース 3:
$total+=28;
ケース 2:
$total+=31;
}
// 閏年の場合は 1 日追加します
if ($c Year%4==0 and $cMonth>2)
{
$total++;
}
$total+=$cDay-1;
//太陰暦の累積日数を使用して、太陽暦の日数を超えているかどうかを判断します
for($j=0;$j
{
$i=1;
for($i=1;$i
{
$mtotal+=$this->毎CM月[$j][$i];
If ($mtotal>=$total)
{
$flag=1;
壊す;
}
}
If ($flag==1)break;
}
return array("m"=>$j,"d"=>$i, "t"=>$total, "n"=>$mtotal);
}
関数 Cal($年,$月,$日)
{
$Par=$this->MyPub($ Year,$Month,$Day);
$md=$this->everyCMonth[$Par["m"]][$Par["d"]]-($Par["n"]-$Par["t"]);
$week=($Par["t"]+5)%7;
if ($this->everyCMonth[$Par["m"]][0]<>0 and $this->everyCMonth[$Par["m"]][0]<$Par[" d"])
{
$mm=$Par["d"]-1;
}その他{
$mm=$Par["d"];
}
if ($Par["d"]==$this->everyCMonth[$Par["d"]][0]+1 および $this->everyCMonth[$Par["d"]][0] <>0)
{
$cMonth=$this->mmonth[0].$this->mmonth[$mm];//閏月
}その他{
$cMonth=$this->mmonth[$mm].$this->mmonth[13];
}
return array("year"=>$this->mten[$this->everyCMonth[$Par["m"]][14]].$this->mtwelve[$this->everyCMonth[ $Par["m"]][15]],
"月"=>$cMonth,
"日"=>$this->mday[$md]、
"週"=>$週);
}
}
/////電話
$test=新しいカレンダー;
$year=$test->Cal(2004,2,20);
echo $年["年"]."年".$年["月"].$年["日"]."週".$年["週"];
?>
この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。
にコピーします。