php note



 

PHP Note(トップページ) > 02.基本的な関数 > 06.日時処理 > time関数、mktime関数、microtime関数(タイプスタンプ)







[Note] time関数、mktime関数、microtime関数(タイプスタンプ)

コンピュータシステムを扱うと、言語やOSに限らず「タイムスタンプ」という概念があります。これは、現在時刻に関する値により生成されたIDのようなものです。例えば、同一ファイルの自動更新の場合に、別途ファイル名にタイムスタンプをつけた名称に加工して履歴として保存しておくなどに利用できます。
PHPで、このタイムスタンプを取得する最も簡単な関数は「time()」です。以下、実例を示しておきます。

<?php

 $date = time();
 echo $date;

?>

上記を実行しますと、以下のような結果が表示されます。

 1285823258

実は、これがいささかクセモノで、現在時刻とどう関係があるのか、直感的には理解ができません。ですので、初めてこの関数により値を出力させてみた方は、皆さん扱いをためらうようであります。
この「time()」関数により生成された値は、1970年1月1日の00:00:00からの経過秒数になっています。これは初めて知った方にとっては、大変面白いかもしれません。というより、怪訝な顔をされるかもしれません。何故1970年なのか?と思われるかと思います。しかしながら、いわゆるUNIXタイムスタンプ値というものは従来よりこの形式を使用しております。

PHPにおいて具体的な現在の日時を取得したい場合は、getdate関数を使われた方が良いですが、タイムスタンプ値により、時間の前後の区別をする、もしくは時間の差をとるというだけであれば、こちらのタイムスタンプ値も有用です。

また、タイムスタンプ関係の関数は、他にも「mktime()」、「microtime()」があります。
まず、mktime関数ですが、こちらは現在時刻ではなく、任意の時刻を指定したタイムスタンプを取得することができます。以下に実例を示しておきます。

<?php

 $date = mktime(0,0,0,1,0,2010);
 $date2 = mktime(0,0,0);
 
 echo $date.” => “;
   echo date(”y/m/d/h:i:s”,$date);
 
 echo “<br>\n”; 
 
 echo $date2.” => “;
  echo date(”y/m/d/h:i:s”,$date2);

?>

上記の結果出力は、以下のようになります。

 1262185200 => 09/12/31/12:00:00
 1285772400 => 10/09/30/12:00:00

上記について、少し説明を加えておきますとmktime関数の書式は、mktime(時、分、秒、月、日、年)となっています。つまり、「何時何分何秒」が先にきて「○月×日」が次で、最後に「年」を指定してタイムスタンプを取得することができます。ですので、PHPコードの1行目「 $date = mktime(0,0,0,1,0,2010);」は2010年1月0日00:00:00のタイムスタンプを取得しています。1月0日と指定すると前月の末日12月31日を指定したことになります。
それを「echo date(”y/m/d/h:i:s”,$date);」のdate関数を用いてタイムスタンプ値を、日付・時刻の形式に直して表示し、指定したとおりの値が取得できているのかを確認しています。
また、PHPコード2行目「$date2 = mktime(0,0,0);」は時、分、秒を各々00に指定して、月、日、年を省略しています。この場合、月、日、年は現在のもの、そして時、分、秒は指定した時刻によるタイムスタンプを取得しています。

さらに最後にmicrotime関数を紹介しておきます。これは関数の名称からも想像できるかと思いますが、time関数、mktime関数が秒単位までのタイムスタンプしか取得できなかったのに対し、microtime関数はマイクロ秒単位のタイムスタンプが取得可能です。ちなみにに1ミリ秒=1/1000秒、1マイクロ秒=1/100万秒ですから、これはとてつもない細かい単位で通常は必要ありませんが、一応、そのような関数が用意されています。
以下、実例を示しておきます。

<?php

 $date3=microtime();
 echo $date3.” => “;
 
 $date4=explode(” “,$date3);
 $date5=$date4[0]+$date4[1];

 echo $date5;
 echo “<br>\n”;

 echo $date5.” => “;
 print(number_format($date5,5));

?>

上記の実行結果は、以下のようになります。

 0.60937800 1285826873 => 1285826873.61
 1285826873.61 => 1,285,826,873.60938

microtime関数による値は、指数部[スペース]整数部となっています。それをexplode関数でスペースを「区切り文字」として分割し、加算すると実際の値になります。上記、結果の1行目は、取得した値($date3)を左側に、その結果($date5)を右側に表示しています。また、これでは自動的に小数点第2位までしか表示されていませんが、PHPコードの最後の行「print(number_format($date5,5));」で小数点第5位まで表示して値の中身を確認しています。







[ カテゴリ一覧 ]

 |  01.基本構文  |  02.基本的な関数  |