日付と時間

PHPでは、日付や時間に関する組み込み関数が多数定義されています。ここでは、一般的によく利用されている関数を中心にして、日付と時間の扱いについて解説します。
PHPで扱える暦
PHPで日付を扱うとき、その基本となる日数の算出に必要な「暦」が幾つか存在しています。どれを基本の暦にするのかは、作者の感性に依ります。
世界協定時 UTC
世界中の時刻を合わせるための公式な時刻を定めているのが世界協定時です。グリニッジ標準時は、天文学を主体として時間を定めていますが、世界標準時は、セシウム原子の振動を基準にして定められている物理学的な時刻です。
JavaScriptでも利用されていますが、PHPでも世界協定時を利用することは可能です。また、世界協定時を使うための関数として、time()、date()、getdate() が定義されており、世界各地のローカルタイムを参照できるようになります。なお、日本時間は、世界協定時から9時間加えることで参照できます。
グリニッジ標準時 GMT
イギリスのグリニッジ天文台での天体観測を元に決められる時間で、少し前までは、この時間を世界共通の標準時間と決められた経緯がありましたが、現在は UTCにその座を譲る格好となっています。
両者はほとんど同じですが、天文を主体としたグリニッジ時は、海の潮汐運動がネックとなり、地球の自転周期は年々長くなっているため、時間の経過と共にずれが生じる矛盾が指摘されています。
Windowsマシンでは、このグリニッジ標準時に、ローカル時間との差分を計算して時刻を示しています。日本時間はグリニッジ標準時から、9時間加えることで求められます。
UNIX
サーバ・コンピュータの標準的な OS である UNIXでは、1970年1月1日午前0時00分00秒からの経過秒数を基準とした時間で、UNIXでは 31536000 ( =365× 24× 60× 60 ) と表現されます。
UNIX時は、プログラムとの相性がよいという唯一の長所がありますが、桁数が多く、見た目に全く理解できない欠点があります。
グレオリオ暦
ローマ教皇グレゴリオ13世は、天文学者アロイシウス・リリウスや数学者クリストフェル・クラヴィウスらの勧めによって 1582年にグレゴリオ暦を作成しました。グレゴリオ暦は現在世界各国で使われている暦法で、それ以前に使用されていたユリウス暦に修正を加えた太陽暦の一種であるといわれています。
これは、ユリウス暦に 400の倍数の年は閏年を設けないという規則を追加し、400年に3日減らすことで平均年を 365.2425日としてより正確な暦が作成されました。
PHPでは、関数 JDToGregorian()、GregorianToJD() を使うことにより、ユリウス日との相互運用が可能となっています。
フランス革命暦
フランス革命の後に始まった暦で、1ヶ月を30日、1週間を10日、1日を10時間、1時間を100分として、年末に5日間の閏日を持っています。フランス革命後、ナポレオンによって廃止される 1806年まで使われた暦。
PHPでは、関数 JDToFrench()、FrenchToJD() を使うことにより、ユリウス日との相互運用が可能となっています。
ユダヤ暦
創生紀元年 (西暦紀元前3761年) から始まり、19で割った余りが 0、3、6、8、11、14、17 になる年を閏年として、基本的に月の満ち欠けで計算される暦です。
関数 JDToJewish()、JewishToJD() を使うことにより、ユリウス日との相互運用が可能となっています。
ユリウス暦
ご存知ジュリアス・シーザー(ユリウス・カエサル)が、紀元前46年に制定した暦で、1年を原則として 365.25日とし、4年に1度の閏年に、2月に1日を加えて 366日とすることで、より正確な暦となりました。ただし、正確な太陽年とは4年に約44分の誤差があるため、後のグレゴリオ暦に取って代わることになりました。
ユリウス日
ユリウス日とは、JJ.Scaligerという人が、月のない日付を考案しました。基本的には、紀元前4713年1月1日12時から数えた日付を表わします。
PHPでは、それぞれの暦を相互運用するとき、このユリウス日を必ず使います。ユリウス日の日付を参照するために関数が幾つか用意され、それに基づいて目的の日付を取得します。なお、ユリウス日とユリウス暦はまったく異なることに注意してください。
関数 意味
unixtojd() UNIX時間(1790年1月1日からの秒数)をユリウス日に変換する
jdtounix() ユリウス日を UNIX時間に変換する
FrenchToJD() フランス革命暦(共和暦)をユリウス日に変換する
JDToFrench() ユリウス日をフランス革命暦に変換する
JDToJulian() ユリウス日をユリウス暦に変換する
JulianToJD() ユリウス暦をユリウス日に変換する
JDToJewish() ユリウス日をユダヤ暦に変換する
JewishToJD ユダヤ暦をユリウス日に変換する
日付と時間を扱う関数
PHPで Webアプリケーションを開発する際、日付と時間は大変重要になります。この節では、一般的に利用されている代表的な時間を扱う関数について解説します。
今の時間を参照する getdate()関数
ローカル時間(局地的な時間の意味で、世界各国のそれぞれの地域の時間を表す)を参照するには、getdate()関数 を使います。この関数には 連想配列として、以下のようなインデックスが定義されています。
こうした連想配列を組み合わせて、現在の日付を参照します。
<?php
  $today = getdate();
  print("$today[year]年$today[mon]月$today[mday]日<br>\n");
 print("今年1月1日から $today[yday]日目です<br>\n");
  print("$today[weekday] $today[month]/$today[mday]/$today[year]");
?>
上記スクリプトの実行結果 → 日付を参照するサンプル
日付表現のフォーマットと時間の参照 date()関数
getdate()関数では、連想配列に参照した日付の表現方法を示しますが、もっと自由なフォーマットで表現したい場合には、date()関数 を使います。
date()関数では、日付を参照するだけでなく、ローカル時間の時刻も合わせて参照することができます。ただし、date()関数の引数がない場合はその限りではありませんが、サーバによっては引数を指定しないと「警告」が出る場合もあります。
フォーマットを定義する引数は、以下のとおりです。
date()関数の引数に、以上のような値を定義することで、様々な形のフォーマットを提供し、表現します。
<?php
  $today = date("Y/m/d l H:i:s");
    print($today);
?>
上記スクリプトの実行結果 → 日付と時間のフォーマットのサンプル


This Page is HTML4.01 Valid! 最新更新日 2004年1月18日   最新更新日 2004年4月1日
Copyright(C) 2002〜2004 banban@scollabo.com