目次
サンプル・プログラムの実行例

サンプル・プログラムのダウンロード
getSolarTerm.php | サンプル・プログラム本体。 |
pahooCalendar.php | 暦計算クラス pahooCalendar。 暦計算クラスの使い方は「PHPで日出没・月出没・月齢・潮を計算」を参照。include_path が通ったディレクトリに配置すること。 |
二十四節気・七十二候とは
解説:pahooCalendarクラス
0039: //暦計算クラス
0040: require_once('pahooCalendar.php');
0173: //pahooCalendarクラス
0174: $pcl = new pahooCalendar();
0175: $pcl->setLanguage('jp');
まず、クラスファイル "pahooCalendar.php" を require_once し、オブジェクトを生成する。
解説:視黄経の算出
0463: /**
0464: * 太陽の黄経計算(視黄経)
0465: * @param double $jy 2000.0からの経過年数
0466: * @return double 太陽の黄経(視黄経)
0467: */
0468: function __longitude_sun($jy) {
0469: $th = 0.0003 * sin(deg2rad($this->__angle(329.7 + 44.43 * $jy)));
0470: $th += 0.0003 * sin(deg2rad($this->__angle(352.5 + 1079.97 * $jy)));
0471: $th += 0.0004 * sin(deg2rad($this->__angle( 21.1 + 720.02 * $jy)));
0472: $th += 0.0004 * sin(deg2rad($this->__angle(157.3 + 299.30 * $jy)));
0473: $th += 0.0004 * sin(deg2rad($this->__angle(234.9 + 315.56 * $jy)));
0474: $th += 0.0005 * sin(deg2rad($this->__angle(291.2 + 22.81 * $jy)));
0475: $th += 0.0005 * sin(deg2rad($this->__angle(207.4 + 1.50 * $jy)));
0476: $th += 0.0006 * sin(deg2rad($this->__angle( 29.8 + 337.18 * $jy)));
0477: $th += 0.0007 * sin(deg2rad($this->__angle(206.8 + 30.35 * $jy)));
0478: $th += 0.0007 * sin(deg2rad($this->__angle(153.3 + 90.38 * $jy)));
0479: $th += 0.0008 * sin(deg2rad($this->__angle(132.5 + 659.29 * $jy)));
0480: $th += 0.0013 * sin(deg2rad($this->__angle( 81.4 + 225.18 * $jy)));
0481: $th += 0.0015 * sin(deg2rad($this->__angle(343.2 + 450.37 * $jy)));
0482: $th += 0.0018 * sin(deg2rad($this->__angle(251.3 + 0.20 * $jy)));
0483: $th += 0.0018 * sin(deg2rad($this->__angle(297.8 + 4452.67 * $jy)));
0484: $th += 0.0020 * sin(deg2rad($this->__angle(247.1 + 329.64 * $jy)));
0485: $th += 0.0048 * sin(deg2rad($this->__angle(234.95 + 19.341 * $jy)));
0486: $th += 0.0200 * sin(deg2rad($this->__angle(355.05 + 719.981 * $jy)));
0487: $th += (1.9146 - 0.00005 * $jy) * sin(deg2rad($this->__angle(357.538 + 359.991 * $jy)));
0488: $th += $this->__angle(280.4603 + 360.00769 * $jy);
0489:
0490: return $this->__angle($th);
0491: }
0493: /**
0494: * 太陽の黄経計算(視黄経)
0495: * @param int $year, $month, $day グレゴリオ暦による年月日
0496: * @param double $hour, $min, $sec 時分秒(世界時)
0497: * @return double 太陽の黄経(視黄経)
0498: */
0499: function longitude_sun($year, $month, $day, $hour, $min, $sec) {
0500: $jy = $this->Gregorian2JY($year, $month, $day, $hour, $min, $sec);
0501:
0502: return $this->__longitude_sun($jy);
0503: }
解説:二十四節気の算出
0587: /**
0588: * その日が二十四節気かどうか
0589: * @param int $year, $month, $day グレゴリオ暦による年月日
0590: * @return string 二十四節気/'' :二十四節気ではない
0591: */
0592: function getSolarTerm($year, $month, $day) {
0593: static $old = -1.0;
0594: static $table = array(
0595: 0 => '春分',
0596: 1 => '清明',
0597: 2 => '穀雨',
0598: 3 => '立夏',
0599: 4 => '小満',
0600: 5 => '芒種',
0601: 6 => '夏至',
0602: 7 => '小暑',
0603: 8 => '大暑',
0604: 9 => '立秋',
0605: 10 => '処暑',
0606: 11 => '白露',
0607: 12 => '秋分',
0608: 13 => '寒露',
0609: 14 => '霜降',
0610: 15 => '立冬',
0611: 16 => '小雪',
0612: 17 => '大雪',
0613: 18 => '冬至',
0614: 19 => '小寒',
0615: 20 => '大寒',
0616: 21 => '立春',
0617: 22 => '雨水',
0618: 23 => '啓蟄'
0619: );
0620:
0621: //太陽黄経
0622: $l1 = $this->longitude_sun($year, $month, $day, 0, 0, 0);
0623: $l2 = $this->longitude_sun($year, $month, $day, 24, 0, 0);
0624:
0625: $n1 = floor($l1 / 15.0);
0626: $n2 = floor($l2 / 15.0);
0627:
0628: return ($n1 != $n2) ? $table[$n2] : '';
0629: }
直前の呼ばれた時の二十四節気を static 変数 $old にn保持しておき、そこから視黄経が 15 度以上離れたら、新しい二十四節気を配列 $table から取り出して返す。
解説:七十二候の算出
0631: /**
0632: * その日が七十二候かどうか
0633: * @param int $year, $month, $day グレゴリオ暦による年月日
0634: * @return string 七十二候/'' :七十二候ではない
0635: */
0636: function getSolarTerm72($year, $month, $day) {
0637: static $old = -1.0;
0638: static $table = array(
0639: 0 => '雀始巣',
0640: 1 => '桜始開',
0641: 2 => '雷乃発声',
0642: 3 => '玄鳥至',
0643: 4 => '鴻雁北',
0644: 5 => '虹始見',
0645: 6 => '葭始生',
0646: 7 => '霜止出苗',
0647: 8 => '牡丹華',
0648: 9 => '鼃始鳴',
0649: 10 => '蚯蚓出',
0650: 11 => '竹笋生',
0651: 12 => '蚕起食桑',
0652: 13 => '紅花栄',
0653: 14 => '麦秋至',
0654: 15 => '蟷螂生',
0655: 16 => '腐草為蛍',
0656: 17 => '梅子黄',
0657: 18 => '乃東枯',
0658: 19 => '菖蒲華',
0659: 20 => '半夏生',
0660: 21 => '温風至',
0661: 22 => '蓮始開',
0662: 23 => '鷹乃学習',
0663: 24 => '桐始結花',
0664: 25 => '土潤溽暑',
0665: 26 => '大雨時行',
0666: 27 => '涼風至',
0667: 28 => '寒蝉鳴',
0668: 29 => '蒙霧升降',
0669: 30 => '綿柎開',
0670: 31 => '天地始粛',
0671: 32 => '禾乃登',
0672: 33 => '草露白',
0673: 34 => '鶺鴒鳴',
0674: 35 => '玄鳥去',
0675: 36 => '雷乃収声',
0676: 37 => '蟄虫坏戸',
0677: 38 => '水始涸',
0678: 39 => '鴻雁来',
0679: 40 => '菊花開',
0680: 41 => '蟋蟀在戸',
0681: 42 => '霜始降',
0682: 43 => '霎時施',
0683: 44 => '楓蔦黄',
0684: 45 => '山茶始開',
0685: 46 => '地始凍',
0686: 47 => '金盞香',
0687: 48 => '虹蔵不見',
0688: 49 => '朔風払葉',
0689: 50 => '橘始黄',
0690: 51 => '閉塞成冬',
0691: 52 => '熊蟄穴',
0692: 53 => '鱖魚群',
0693: 54 => '乃東生',
0694: 55 => '麋角解',
0695: 56 => '雪下出麦',
0696: 57 => '芹乃栄',
0697: 58 => '水泉動',
0698: 59 => '雉始雊',
0699: 60 => '款冬華',
0700: 61 => '水沢腹堅',
0701: 62 => '雞始乳',
0702: 63 => '東風解凍',
0703: 64 => '黄鶯睍睆',
0704: 65 => '魚上氷',
0705: 66 => '土脉潤起',
0706: 67 => '霞始靆',
0707: 68 => '草木萠動',
0708: 69 => '蟄虫啓戸',
0709: 70 => '桃始笑',
0710: 71 => '菜虫化蝶'
0711: );
0712:
0713: //太陽黄経
0714: $l1 = $this->longitude_sun($year, $month, $day, 0, 0, 0);
0715: $l2 = $this->longitude_sun($year, $month, $day, 24, 0, 0);
0716:
0717: $n1 = floor($l1 / 5.0);
0718: $n2 = floor($l2 / 5.0);
0719:
0720: return ($n1 != $n2) ? $table[$n2] : '';
0721: }
解説:節分かどうか
0723: /**
0724: * その日が節分(立春の前日)かどうか
0725: * @param int $year, $month, $day グレゴリオ暦による年月日
0726: * @return bool TRUE:節分/FALSE:節分ではない
0727: */
0728: function isSetsubun($year, $month, $day) {
0729: //太陽黄経
0730: $l1 = $this->longitude_sun($year, $month, $day, +24, 0, 0);
0731: $l2 = $this->longitude_sun($year, $month, $day, +48, 0, 0);
0732:
0733: $n1 = floor($l1 / 15.0);
0734: $n2 = floor($l2 / 15.0);
0735:
0736: //翌日が立春かどうか
0737: return (($n1 != $n2) && ($n2 == 21)) ? TRUE : FALSE;
0738: }
活用例
参考サイト
- こよみ用語解説 二十四節気:国立天文台暦計算室
- CalcLongitudeSun:GitHub
- Ruby - 太陽黄経計算!:mk-mode BLOG
- PHP で 3 ヶ月カレンダーを作る:ぱふぅ家のホームページ
- PHP で日出没・月出没・月齢・潮を計算:ぱふぅ家のホームページ
- 二十四節気・七十二候を計算する:みんなの知識 ちょっと便利帳
- 暑中見舞い・残暑見舞いを送る時期は?:みんなの知識 ちょっと便利帳
- 指定した年の節分を調べる:みんなの知識 ちょっと便利
(2021 年 1 月 23 日)節分を算出できるようにした。PHP8 対応。