ホームページ バックエンド開発 PHPチュートリアル PHPの日付操作コード - 旧暦・西暦変換、閏年、日数計算など_PHPチュートリアル

PHPの日付操作コード - 旧暦・西暦変換、閏年、日数計算など_PHPチュートリアル

Jul 13, 2016 am 10:32 AM
php コード 太陰暦 日々 操作する 日付 時間 使用 親切 計算する 変換する うるう年

これは、グレゴリオ暦と旧暦の変換、中国の日付形式への変換、旧暦間の日数の計算、旧暦の年に応じた星座の取得、および取得を含む実践的な PHP 日付と時刻の操作クラスです。旧暦の月の日数、および旧暦の各年の日数を取得する 閏月を取得し、旧暦の日付と旧暦の最初の月の初日の間の日数を計算します。グレゴリオ暦(太陽暦)の日付の間の日数、旧暦の1月1日からの日数に基づいて旧暦の日付を計算、天の幹と地の支の暦を取得するなど、PHPの日付操作クラス: Lunar .class.php コードは次のとおりです:

001

002クラスルナー{

003 var $MIN_YEAR = 1891;

004 var $MAX_YEAR = 2100;

005 var $lunarInfo = array(

006 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)、配列(0,2,13,59728)、

007 配列(0,2,2,27296),配列(3,1,22,44368),配列(0,2,10,43856),配列(8,1,30,19304),配列(0, 2,19,19168)、配列(0,2,8,42352)、

008 配列(5,1,29,21096),配列(0,2,16,53856),配列(0,2,4,55632),配列(4,1,25,27304),配列(0, 2,13,22176)、配列(0,2,2,39632)、

009 配列(2,1,22,19176),配列(0,2,10,19168),配列(6,1,30,42200),配列(0,2,18,42192),配列(0, 2,6,53840)、配列(5,1,26,54568)、

010 配列(0,2,14,46400),配列(0,2,3,54944),配列(2,1,23,38608),配列(0,2,11,38320),配列(7, 2,1,18872)、配列(0,2,20,18800)、

011 配列(0,2,8,42160),配列(5,1,28,45656),配列(0,2,16,27216),配列(0,2,5,27968),配列(4, 1,24,44456)、配列(0,2,13,11104),

012 配列(0,2,2,38256),配列(2,1,23,18808),配列(0,2,10,18800),配列(6,1,30,25776),配列(0, 2,17,54432)、配列(0,2,6,59984)、

013 配列(5,1,26,27976),配列(0,2,14,23248),配列(0,2,4,11104),配列(3,1,24,37744),配列(0, 2,11,37600)、配列(7,1,31,51560)、

014 配列(0,2,19,51536),配列(0,2,8,54432),配列(6,1,27,55888),配列(0,2,15,46416),配列(0, 2,5,22176)、配列(4,1,25,43736)、

015 配列(0,2,13,9680),配​​列(0,2,2,37584),配列(2,1,22,51544),配列(0,2,10,43344),配列(7, 1,29,46248)、配列(0,2,17,27808)、

016 配列(0,2,6,46416),配列(5,1,27,21928),配列(0,2,14,19872),配列(0,2,3,42416),配列(3, 1,24,21176)、配列(0,2,12,21168)、

017 配列(8,1,31,43344),配列(0,2,18,59728),配列(0,2,8,27296),配列(6,1,28,44368),配列(0, 2,15,43856)、配列(0,2,5,19296)、

018 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)、配列(7,1,30,23208)、

019 配列(0,2,17,22176),配列(0,2,6,38608),配列(5,1,27,19176),配列(0,2,15,19152),配列(0, 2,3,42192)、配列(4,1,23,53864)、

020 配列(0,2,11,53840),配列(8,1,31,54568),配列(0,2,18,46400),配列(0,2,7,46752),配列(6, 1,28,38608)、配列(0,2,16,38320)、

021 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)、配列(0,2,9,27968)、

022 配列(6,1,29,44448),配列(0,2,17,43872),配列(0,2,6,38256),配列(5,1,27,18808),配列(0, 2,15,18800)、配列(0,2,4,25776)、

023 配列(3,1,23,27216),配列(0,2,10,59984),配列(8,1,31,27432),配列(0,2,19,23232),配列(0, 2,7,43872)、配列(5,1,28,37736)、

024 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)、配列(2,1,22,23208)、

025 配列(0,2,9,22176),配列(7,1,29,43736),配列(0,2,18,9680),配​​列(0,2,7,37584),配列(5, 1,26,51544)、配列(0,2,14,43344)、

026 配列(0,2,3,46240),配列(4,1,23,46416),配列(0,2,10,44368),配列(9,1,31,21928),配列(0, 2,19,19360)、配列(0,2,8,42416)、

027 配列(6,1,28,21176),配列(0,2,16,21168),配列(0,2,5,43312),配列(4,1,25,29864),配列(0, 2,12,27296)、配列(0,2,1,44368)、

028 配列(2,1,22,19880),配​​列(0,2,10,19296),配列(6,1,29,42352),配列(0,2,17,42208),配列(0, 2,6,53856)、配列(5,1,26,59696)、

029 配列(0,2,13,54576),配列(0,2,3,23200),配列(3,1,23,27472),配列(0,2,11,38608),配列(11, 1,31,19176)、配列(0,2,19,19152)、

030 配列(0,2,8,42192),配列(6,1,28,53848),配列(0,2,15,53840),配列(0,2,4,54560),配列(5, 1,24,55968)、配列(0,2,12,46496)、

031 配列(0,2,1,22224),配列(2,1,22,19160),配列(0,2,10,18864),配列(7,1,30,42168),配列(0, 2,17,42160)、配列(0,2,6,43600)、

032 配列(5,1,26,46376),配列(0,2,14,27936),配列(0,2,2,44448),配列(3,1,23,21936),配列(0, 2,11,37744)、配列(8,2,1,18808)、

033 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)、配列(4,1,24,43872)、

034 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)、配列(0,2,17,54432)、

035 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)、配列(0,2,11,21200)、

036 配列(8,1,31,43352),配列(0,2,19,43344),配列(0,2,7,46240),配列(6,1,27,46416),配列(0, 2,15,44368)、配列(0,2,5,21920)、

037 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)、配列(7,1,29,29336)、

038 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)、配列(4,1,24,21104),

039 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)、配列(0,2,15,22224)、

040 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),配列(0,2,9,54560)

041 );

042 /**

043 * 太陽暦を太陰暦に変換します

044 * @param yearグレゴリオ暦年

045 * @param month グレゴリオ暦の月

046 * @param date グレゴリオ暦の日

047*/

048 function ConvertSolarToLunar($year,$month,$date){

049 //デバッガー;

050 $yearData = $this->lunarInfo[$year-$this->MIN_YEAR];

051 if($year==$this->MIN_YEAR&&$month<=2&&$date<=9){

052 return array(1891,'正月','初一','辛卯',1,1,'兔');

053 }

054 return $this->getLunarByBetween($year,$this->getDaysBetweenSolar($year,$month,$date,$yearData[1],$yearData[2]));

055 }

056 function ConvertSolarMonthToLunar($year,$month) {

057 $yearData = $this->lunarInfo[$year-$this->MIN_YEAR];

058 if($year==$this->MIN_YEAR&&$month<=2&&$date<=9){

059 return array(1891,'正月','初一','辛卯',1,1,'兔');

060 }

061 $month_days_ary = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

062 $dd = $month_days_ary[$month];

063 if($this->isLeap Year($year) && $month == 2) $dd++;

064 $lunar_ary = array();

065 for ($i = 1; $i < $dd; $i++) {

066 $array = $this->getLunarByBetween($year,$this->getDaysBetweenSolar($year, $month, $i, $yearData[1],$yearData[2]));

067 $array[] = $year 。 「-」。 $month 。 「-」。 $i;

068 $lunar_ary[$i] = $array;

069 }

070 return $lunar_ary;

071 }

072 /**

073 * 閏年かどうかを判定します

074 * @param year

075*/

076 関数 isLeapyear($year){

077 return (($year%4==0 && $year%100 !=0) || ($year%400==0));

078 }

079 /**

080 * 幹と枝の年を取得します

081 * @param year

082*/

083 function getLunar YearName($year){

084 $sky = array('庚','辛','壬','癸','甲','乙','丙','丁','戊','己');

085 $earth = array('申','酉','戌','亥','子','丑','寅','卯','辰','巳','午' 、'未');

086 $year = $year.'';

087 return $sky[$year{3}].$earth[$year%12];

088 }

089 /**

090 * 旧暦に応じて星座を取得します

091 * @param年旧暦

092*/

093 function get YearZodiac($year){

094 $zodiac = array('猴','鸡','狗','猪','鼠','牛','虎','兔','龙','蛇','马' 、'羊');

095 return $zodiac[$year%12];

096 }

097 /**

098 * 太陰暦を太陽暦に変換します

099 * @param年 旧暦-年

100 * @param month 旧暦 - 月、閏月の処理: たとえば、5月に閏月がある場合、2番目の5月は6月となり、旧暦の13ヶ月に相当しますが、場合によってはその数が13 か月目の日数は 0 です

101 * @param date 旧暦日

102*/

103 function ConvertLunarToSolar($year,$month,$date){

104 $yearData = $this->lunarInfo[$year-$this->MIN_YEAR];

105 $between = $this->getDaysBetweenLunar($year,$month,$date);

106 $res = mktime(0,0,0,$yearData[1],$yearData[2],$year);

107 $res = date('Y-m-d', $res+$between*24*60*60);

108 $day =explode('-', $res);

109 $year = $day[0];

110 $month= $day[1];

111 $day = $day[2];

112 return array($year, $month, $day);

113 }

114 /**

115 * 新暦の月の日数を取得します

116 * @param year グレゴリオ暦年

117 * @param month グレゴリオ暦の月

118*/

119 function getSolarMonthDays($year,$month){

120 $monthHash = array('1'=>31,'2'=>$this->isLeap Year($year)?29:28,'3'=>31,'4'=> 30、'5'=>31、'6'=>30、'7'=>31、'8'=>31、'9'=>30、'10'=>31、 '11'=>30、'12'=>31);

121 return $monthHash["$month"];

122 }

123 /**

124 * 获取阴历月份の天数

125 * @param year 阴历-年

126 * @param month 阴历-月、从一月开始

127 */

128 function getLunarMonthDays($year,$month){

129 $monthData = $this->getLunarMonths($year);

130 return $monthData[$month-1];

131 }

132 /**

133 * 旧暦の各月の日付の配列を取得します

134 * @param year

135*/

136 function getLunarMonths($year){

137 $yearData = $this->lunarInfo[$year - $this->MIN_YEAR];

138 $leapMonth = $yearData[0];

139 $bit = decbin($yearData[3]);

140 for ($i = 0; $i

141 $bitArray[$i] = substr($bit, $i, 1);

142 }

143 for($k=0,$klen=16-count($bitArray);$k

144 array_unshift($bitArray, '0');

145 }

146 $bitArray = array_slice($bitArray,0,($leapMonth==0?12:13));

147 for($i=0; $i

148 $bitArray[$i] = $bitArray[$i] + 29;

149 }

150 return $bitArray;

151 }

152 /**

153 * 旧暦の各年の日数を取得します

154 * @param 旧暦年

155*/

156 function getLunar YearDays($year){

157 $yearData = $this->lunarInfo[$year-$this->MIN_YEAR];

158 $monthArray = $this->getLunar YearMonths($year);

159 $len = count($monthArray);

160 return ($monthArray[$len-1]==0?$monthArray[$len-2]:$monthArray[$len-1]);

161 }

162 function getLunar YearMonths($year){

163 //デバッガー;

164 $monthData = $this->getLunarMonths($year);

165 $res=array();

166 $temp=0;

167 $yearData = $this->lunarInfo[$year-$this->MIN_YEAR];

168 $len = ($yearData[0]==0?12:13);

169 for($i=0;$i

170 $temp=0;

171 for($j=0;$j

172 $temp+=$monthData[$j];

173 }

174 array_push($res, $temp);

175 }

176 return $res;

177 }

178 /**

179 * 閏月を取得します

180 * @param 旧暦年

181*/

182 function getLeapMonth($year){

183 $yearData = $this->lunarInfo[$year-$this->MIN_YEAR];

184 return $yearData[0];

185 }

186 /**

187 * 旧暦の日付と旧暦の最初の月の初日の間の日数を計算します

188 * @param year

189 * @param month

190 * @param date

191*/

192 function getDaysBetweenLunar($year,$month,$date){

193 $yearMonth = $this->getLunarMonths($year);

194 $res=0;

195 for($i=1;$i

196 $res +=$yearMonth[$i-1];

197 }

198 $res+=$date-1;

199 return $res;

200 }

201 /**

202 * 2つの太陽暦の日付の間の日数を計算します

203 * @param yearグレゴリオ暦

204 * @param cmonth

205 * @param cdate

206 * @param dmonth 旧暦の最初の月に相当する新暦の月

207 * @param ddate 太陰暦の初日に相当する太陽暦の日数

208*/

209 function getDaysBetweenSolar($year,$cmonth,$cdate,$dmonth,$ddate){

210 $a = mktime(0,0,0,$cmonth,$cdate,$year);

211 $b = mktime(0,0,0,$dmonth,$ddate,$year);

212 return ceil(($a-$b)/24/3600);

213 }

214 /**

215 ※旧暦の日付は旧暦の1月1日からの日数で計算します

216 * @param yearグレゴリオ暦

217 * @param 間の日数

218*/

219 function getLunarByBetween($year,$between){

220 //デバッガー;

221 $lunarArray = array();

222 $yearMonth=array();

223 $t=0;

224 $e=0;

225 $leapMonth=0;

226 $m='';

227 if($between==0){

228 array_push($lunarArray, $year,'正月','初一');

229 $t = 1;

230 $e = 1;

231 }その他{

232 $year = $between>0? $year : ($year-1);

233 $yearMonth = $this->getLunar YearMonths($year);

234 $leapMonth = $this->getLeapMonth($year);

235 $between = $between>0?$between : ($this->getLunar YearDays($year)+$between);

236 for($i=0;$i

237 if($between==$yearMonth[$i]){

238 $t=$i+2;

239 $e=1;

240休憩;

241 }else if($between

242 $t=$i+1;

243 $e=$between-(empty($yearMonth[$i-1])?0:$yearMonth[$i-1])+1;

244休憩;

245}

246}

247 $m = ($leapMonth!=0&&$t==$leapMonth+1)?('leap'.$this->getCapitalNum($t- 1,true)):$this->getCapitalNum(( $leapMonth!=0&&$leapMonth+1

248 $my_year = $this->to Year($year);

249 array_push($lunarArray,$my_year,$m,$this->getCapitalNum($e,false));

250}

251 array_push($lunarArray,$this->getLunar YearName($year));//幹と地上の枝

252 array_push($lunarArray,$t,$e);

253 array_push($lunarArray,$this->getyearZodiac($year));//12星座

254 array_push($lunarArray,$leapMonth);//閏月

255 return $lunarArray;

256}

257 //中国年に変換します

258 関数 toyear($year){

259 $arr = array("zero","one","two","three","four","five","six","seven","eight","nine");

260 $year_arr = str_split($year);

261 $str = $arr[$year_arr[0]].$arr[$year_arr[1]].$arr[$year_arr[2]].$arr[$year_arr[3]];

262 return $str;

263 }

264 /**

265 ※数字の旧暦名を取得します

266 * @param num 番号

267 * @param isMonth 月の数字かどうか

268*/

269 function getCapitalNum($num,$isMonth){

270 $isMonth = $isMonth false;

271 $dateHash=array('0'=>'','1'=>'one','2'=>'two','3'=>'three','4'= >'4','5'=>'5','6'=>'6','7'=>'7','8'=>'8','9'= >'9','10'=>'10');

272 $monthHash=array('0'=>'','1'=>'最初の月','2'=>'2月','3'=>'3月','4 ' =>'4月','5'=>'5月','6'=>'6月','7'=>'7月','8'=>'8か月','9 '=>'9 月','10'=>'10 月','11'=>'冬の月','12'=>'陰暦の第 12 月');

273 $res='';

274 if($isMonth){

275 $res = $monthHash[$num];

276 }その他{

277 if($num

278 $res = 'chu'.$dateHash[$num];

279 }else if($num>10&&$num

280 $res = '十'.$dateHash[$num-10];

281 }else if($num==20){

282 $res = "20";

283 }else if($num>20&&$num

284 $res = "忿".$dateHash[$num-20];

285 }else if($num==30){

286 $res = "30";

287 }

288}

289 return $res;

290}

291}

292?>

上記のコードを Lunar.class.php という名前で保存してください。次の例では、このファイルを呼び出し、その使用方法を示します。

01

02require_once("Lunar.class.php");//最初にこのファイルをインクルードします

03$lunar = new Lunar();//オブジェクトを生成する

04$date = $lunar->convertLunarToSolar(2014,2,12) //グレゴリオ暦を太陰暦に変換します

;

05$date = $lunar->get YearZodiac(2014,2,12) //旧暦に応じた星座を取得します

;

06$date = $lunar->isLeap Year(2014,2,12) //うるう年を判定します

;

07//他の関数もこの方法で呼び出されます

08print_r($date);

09//旧暦からグレゴリオ暦に変換する場合、コードは次のようになります:

10$date = $lunar->convertLunarToSolar(2014,2,12) //太陰暦をグレゴリオ暦に変換します

;

11print_r($date);

12?>

実は内部のいくつかの機能は個別に接続して機能として使用することができ、不要な機能は削除することも可能です。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/755623.html技術記事西暦と旧暦の変換、中国の日付形式への変換、旧暦間の日数の計算、旧暦年に応じた干支の取得、旧暦の取得など、実践的なPHP日時操作クラスです。 .
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP データベースの操作 CakePHP データベースの操作 Sep 10, 2024 pm 05:25 PM

CakePHP でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

この章では、ルーティングに関連する次のトピックを学習します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

CakePHP のロギング CakePHP のロギング Sep 10, 2024 pm 05:26 PM

CakePHP へのログインは非常に簡単な作業です。使用する関数は 1 つだけです。 cronjob などのバックグラウンド プロセスのエラー、例外、ユーザー アクティビティ、ユーザーが実行したアクションをログに記録できます。 CakePHP でのデータのログ記録は簡単です。 log()関数が提供されています

See all articles