日付関連文字列変換 関数一覧 |
class datetimeString ( lib/datetime.php )
意外に厄介なのが日付の表示関係です。日付のフォーマットは様々な形式があり、このため、日付の取扱いはかなり面倒になっています。
とりわけ、関数には日本の日付表示を取り扱うものがなく、英語表記との変換もなかなか厄介です。
このクラスは、よく使ういくつかの形式間での表記を変換します。
また、期間計算のために内部で計算可能な UNIX タイムスタンプとして補完します。
| ・ | 英語表記は 11 Jun 2002 のように日付は数字、次に月を3文字の短縮形で続け、最後に年が来ます。いわゆる 2000 年問題がありますので年の2桁表現はこのクラスでは扱いません。 |
一方、iso8601 という規格では 2002-6-11 のように数字で年、月、日の順に並びます。で、日本ではやはり、2002年6月11日 のように表示させたいですね。というわけで、こうした日付の変換は予想外に厄介です。 |
|
メールの処理などでは、更にタイムゾーンを考慮する必要があります。PHP の関数はマシンのローカルタイムとグリニッジ標準時の変換しかありませんから、様々なタイムゾーンが混在するメールなどでは大変苦労することになります。 |
| ・ |
このクラスは、こうした各種表現を簡潔に利用する事を目的にしました。 各種変換は、以上の3通りの形式を判別して任意の方式へ変換します。 |
日付の計算に関しては、2023年問題というものもあります。これは UNIX の時間が 1970年を起点とした32ビット数値の秒数で表されているため、2023年以降が表現できない、という問題です。現状で、UNIX の標準関数(それをラップした PHP関数)ではこの問題を避けられません。 |
|
ただ、PostgreSQL では 64 ビット値が使われるため、非常に長い年月を取り扱うことができます。例えば、江戸時代の年代やギリシャ、ローマの年表などと期間計算を行うことができます。 |
|
現在の所、タイムゾーンの変換では閏年などの関係で一旦 UNIX タイムに変換して補正を行っているので、2023年問題に抵触します。 |
| ・ | 変換については、複雑なフォーマット指定は一切行わず、使用頻度の高い物に絞っています。必要な形式が必要なときは、set() 関数で一旦、各単位に分解して収納しますから、クラスを継承して組み立てて下さい。 |
