ホームページ >バックエンド開発 >PHPチュートリアル >PHPのカレンダー拡張機能とは何ですか?使い方?

PHPのカレンダー拡張機能とは何ですか?使い方?

青灯夜游
青灯夜游転載
2021-06-28 18:35:104026ブラウズ

Calendar は日付カレンダーの拡張機能のセットです。PHP でこの Calendar 拡張機能を使用するにはどうすればよいですか?この記事では、カレンダー拡張機能のインストール方法と使い方を紹介します。

PHPのカレンダー拡張機能とは何ですか?使い方?

Calendar は日付カレンダーの拡張機能のセットですが、私たちにとっては太陰暦に関連する操作がありません。そのため、私たち中国人にとって、この拡張機能は機能しません。実際の効果しかし、だからといってそれを理解して学ぶことが妨げられるわけではありません。

日付カレンダー型

通常の状況での日付操作では、PHP はデフォルトで UTC 時間を使用します。これは、我が国の国際標準時間です。 , 北京時間の東 8 区を表すには、標準 UTC 時間に 8 を加算する必要があります。もちろん、php.ini またはデータベース内のタイム ゾーン関連のパラメーターを直接変更して、日付とタイム ゾーンを定義することもできます。

標準タイム ゾーンは、グレゴリオ暦に対応します。それは、現在私たちが最も一般的に使用しているグレゴリオ暦と太陽暦の日付です。この標準のグレゴリオ暦に加えて、カレンダー拡張機能はユダヤ暦、フランス暦、および別の非常に有名なユリウス暦もサポートしています。私たちのグレゴリオ暦はユリウス暦から進化しました。それらの間の違いは大きくありませんが、ユダヤ暦とフランス暦の間の違いは比較的大きいです。次のコードでは、さまざまな暦の違いを確認します。

これらの暦の具体的な内容については、ご自身で関連情報を確認することができるほか、なぜユリウス暦が廃止されグレゴリオ暦に変更されたのかなど、興味深い歴史的知識を学ぶこともできます。カレンダー。また、なぜフランスの暦の年は短いのに、ユダヤの暦の年はとても記憶に残るのでしょうか?フランス暦とユダヤ暦の月の名前の由来は、どれもとても興味深い話です。

カレンダー拡張機能のインストールとカレンダー情報の表示

カレンダー拡張機能は PHP インストール パッケージに統合されているため、個別にインストールする必要はありません。カレンダー関連の関数を使用できない場合は、PHP を再コンパイルして --enable-calendar パラメーターを追加できます。

次に指定する暦の詳細ですが、ここではユダヤ暦を指定しています。

$info = cal_info(2);
print_r($info);
// Array
// (
//     [months] => Array
//         (
//             [1] => Tishri
//             [2] => Heshvan
//             [3] => Kislev
//             [4] => Tevet
//             [5] => Shevat
//             [6] => Adar I
//             [7] => Adar II
//             [8] => Nisan
//             [9] => Iyyar
//             [10] => Sivan
//             [11] => Tammuz
//             [12] => Av
//             [13] => Elul
//         )
//     [abbrevmonths] => Array
//         (
//             [1] => Tishri
//             [2] => Heshvan
//             [3] => Kislev
//             [4] => Tevet
//             [5] => Shevat
//             [6] => Adar I
//             [7] => Adar II
//             [8] => Nisan
//             [9] => Iyyar
//             [10] => Sivan
//             [11] => Tammuz
//             [12] => Av
//             [13] => Elul
//         )
//     [maxdaysinmonth] => 30
//     [calname] => Jewish
//     [calsymbol] => CAL_JEWISH
// )

cal_info() 関数が受け取るパラメータは定数で、CAL_GREGORIAN、CAL_JULIAN、CAL_JEWISH、および CAL_FRENCH です。対応する数値は 0、1、2、および 3 です。このコードでは、CAL_JEWISH 情報を返します。ユダヤ暦の月の名前は、ニサンやティシュリなど、グレゴリオ暦の英語の月の名前とは異なることがわかります。具体的な内容については掘り下げませんが、結局のところ、私たちの日常生活ではこの種のカレンダーにアクセスすることはできません。

他のカレンダーから返された情報を自分で試すことができます。グレゴリオ暦とユリウス暦は同じですが、グレゴリオ暦の月の名前は異なり、これらの名前は非常に興味深いものです。

日付カレンダー変換

まず、カレンダー変換を実行するには、指定された日付をユリウス日カウントに変換する必要があります。この jd カウントは、さまざまなカレンダー間の変換に使用される、Calendar 拡張の中間変数とみなすことができます。

//  转变Unix时间戳为Julian Day计数
$today = unixtojd(mktime(0, 0, 0, 9, 23, 2020));
echo $today, PHP_EOL; // 2459116

unixtojd() 関数を使用して、UNIX タイムスタンプを JD カウントに変換します。次に、2020 年 9 月 23 日がユダヤ暦のどの日に相当するかを見てみましょう。

// 获取当前犹太历时间
print_r(cal_from_jd($today, CAL_JEWISH));
// Array
// (
//     [date] => 1/5/5781
//     [month] => 1
//     [day] => 5
//     [year] => 5781
//     [dow] => 3
//     [abbrevdayname] => Wed
//     [dayname] => Wednesday
//     [abbrevmonth] => Tishri
//     [monthname] => Tishri
// )

返された情報はすでに非常に明確です。今日はユダヤ暦 5781 年 1 月 5 日水曜日です。現在の月はティシュリで、グレゴリオ暦の最初の月、ユダヤ暦では教会暦の7番目の月に相当し、秋の到来を表します。

cal_from_jd()関数は、jd数に基づいて指定されたカレンダーの詳細情報を返す関数です。もう 1 つの cal_to_jd() 関数は、サポートされているカレンダー データを jd カウントに変換します。

echo cal_to_jd(CAL_JEWISH, 1, 5, 5781), PHP_EOL; // 2459116
echo cal_to_jd(CAL_GREGORIAN,9, 23, 2020), PHP_EOL; // 2459116

上記のユダヤ暦によって返される jd カウントは、グレゴリオ暦によって返される jd カウントと一致していることがわかります。

もちろん、jd カウントの日付を UNIX 時間に変換することもできます。

echo date("Y-m-d", jdtounix($today)), PHP_EOL;
// 2020-09-23

cal_from_jd() と cal_to_jd() に加えて、Calendar 拡張機能は日付変換のためのいくつかの簡単な関数も提供しますが、それらは cal_from_jd() 関数が返すのとは異なり、文字列型の日付情報を直接返します。日付の詳細。

// 转变一个Gregorian历法日期到Julian Day计数
$jd = GregorianToJD(9, 23, 2020);

// 转变一个Julian Day计数为Gregorian历法日期
echo jdtogregorian($jd), PHP_EOL; // 9/23/2020
// 转变一个Julian Day计数为Julian历法日期
echo jdtojulian($jd), PHP_EOL; // 9/10/2020
// 转变一个Julian Day计数为犹太历法日期
echo jdtojewish($jd), PHP_EOL; // 1/5/5781
// 转变一个Julian Day计数为unix时间戳
echo jdtounix($jd), PHP_EOL; // 1600819200

$jd = GregorianToJD(9, 23, 1799);
// 转变一个Julian Day计数为French历法日期
echo jdtofrench($jd), PHP_EOL; // 1/1/8

GregorianToJD() メソッドは、グレゴリオ暦の日付を jd カウントにすばやく変換します。 jdtoxxxx の関数は、jd カウントに対応する日付カレンダーの文字列情報を迅速に返します。

暦日は 1792 年 9 月 22 日から 1806 年 9 月 22 日までの期間内の日付のみであることに注意してください。これは第一フランス共和国の設立後に導入され、使用が終了した暦です。 1806年、ナポレオンは1804年に第一次フランス帝国を設立しました。帝国はフランス暦(共和制暦)を廃止し、グレゴリオ暦を全面的に導入した。

特定の月の日数

上記の歴史的知識はどのようにして学びましたか?次に、カレンダー拡張機能についての学習に戻りましょう。

$num = cal_days_in_month(CAL_GREGORIAN, 2, 2020);
echo $num, PHP_EOL; // 29

cal_days_in_month() 函数是返回指定历法月份的天数,比如我们看看 2020 年的 2月 是不是 闰月 就可以用这个函数来实现。

复活节彩蛋

复活节是西方非常重要的一个节日,所以在 Calendar 扩展中就有函数可以直接获得指定年份的复活节日期。关于复活节的计算方式其实还是比较复杂的,手工推算是比较麻烦的,而程序计算就非常方便了。

// 指定年份的复活节时间戳
echo date("M-d-Y", easter_date(2019)), PHP_EOL;        // Apr-21-2019
echo date("M-d-Y", easter_date(2020)), PHP_EOL;        // Apr-12-2020
echo date("M-d-Y", easter_date(2021)), PHP_EOL;        // Apr-04-2021

// 3月21日到复活节之间的天数
echo easter_days(2019), PHP_EOL;        // 31
echo easter_days(2020), PHP_EOL;        // 22
echo easter_days(2021), PHP_EOL;        // 14

easter_date() 函数就是返回指定年份的复活节日期。而 easter_days() 函数则是返回从当年公历的 3月21日 到复活节之间的天数。

复活节是每年春分月圆后的第一个星期日,而春分一般是在3月21日,这就简化为只要计算满月的日期和紧挨的星期日的日期就可以得到每年复活节的具体日期了。这种函数在西方世界的软件开发中会非常常用,其实就像我们需要获取每年春节的具体公历日期一样。

总结

是不是很有意思的一套扩展函数。不过对于我们主要面向国内开发的开发者来说用处确实不大,但笔者在学习这个扩展的时候另外收获了不少历史方面的知识,也算是开了眼界,也不失为一大收获,大家也自己试着玩玩并且查查相关的历史知识吧,说不定你的收获会更多!

测试代码:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202009/source/10.PHP中非常好玩的Calendar扩展学习.php

参考文档:https://www.php.net/manual/zh/book.calendar.php

推荐学习:《PHP视频教程

以上がPHPのカレンダー拡張機能とは何ですか?使い方?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はweixinで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。