導入
ここでは、実際に触ってみることで使い方を覚えていきましょう。
まずは Date
オブジェクトのインスタンスを作成するところからです。
例 40-1Date オブジェクトの作成 <?php
require_once 'Date.php';
// パラメータを省略すると、現在の日付・時刻になります
$now = new Date();
// あるいは ISO 形式の文字列を渡します
$longAgo = new Date('1813-02-23T05:34:23');
// PHP の Unix タイムスタンプから Date オブジェクトを作成します
$timestamp = time();
$nearlyNow = new Date($timestamp);
// 既存の Date オブジェクトのコピーを作成します
$copyDate = new Date($longAgo);
?> |
|
Date オブジェクトに対して何らかの操作をしたら、
きっとその結果を取得したくなることでしょう。
これを行うにはいくつかの方法があります。たとえば、
getTime
や
getDate
を使用するなどです。
例 40-2さまざまなフォーマットでの日付の取得 <?php
require_once 'Date.php';
$now = new Date();
// UNIX タイムスタンプ: 1183054688
echo $now->getTime();
// ISO 形式の日付: 2007-06-28 20:18:08
echo $now->getDate();
?> |
|
Date にはこれ以外にもさまざまな出力メソッドがあります。
それらについては後半で扱います。
さて、Date
のインスタンスを作成する方法がわかったので、
ちょっとした作業をしてみましょう。
時刻の差の計算
2 つの日付の間の時間を知りたいといった場面はよくあることでしょう。
Date を使えば、そんなのは簡単なことです。
まずは新たに Date_Span オブジェクトを作成してその
setFromDateDiff
メソッドを使用し、
toDays
を用いて正確な日数を取得します。
例 40-3時刻の差の計算 <?php
require_once 'Date.php';
$someDate = new Date('1813-02-23T05:34:23');
$otherDate = new Date('1789-12-21T18:23:42');
$span = new Date_Span();
$span->setFromDateDiff($someDate, $otherDate);
// 時刻の差を日付単位で表示します: 8463,46575231
echo $span->toDays();
// 時刻の差を年数で表示します: 23
echo (int)($span->toDays() / 365);
?> |
|
注意
Date とは異なり、Date_Span
は内部的には整数型で処理を行います。つまり、32 ビット
(約 68 年) までしか処理できないということです。
タイムゾーンの変換
Date は、タイムゾーンも扱うことができます。
サポートするすべてのタイムゾーンを配列で取得するには
getAvailableIDs
を次のように使用します。
$list = Date_TimeZone::getAvailableIDs();
convertTZ は、
Date オブジェクトのタイムゾーン設定を指定したものに変更します。
format
を使用すると、タイムゾーンの設定を表示することができます。
Date_TimeZone の
getDefault メソッドを使用すると、
そのコンピュータ上のデフォルトのタイムゾーンを取得することができます。
例 40-4タイムゾーンの変換 <?php
require_once 'Date.php';
// 現在が 2007-06-28 18:42:12 だとしましょう
$now = new Date();
$timezone = new Date_TimeZone('Australia/Adelaide');
// 日付オブジェクトのタイムゾーンを変換します
$now->convertTZ($timezone);
// 次のようになります: 2007-06-29 02:12:12
echo $now->getDate();
// タイムゾーンつきで、このようになります: 2007-06-29 02:12:12+09:30
echo $now->format('%Y-%m-%d %H:%M:%S%O');
// もとに戻します
$defaultZone = Date_TimeZone::getDefault();
$now->convertTZ($defaultZone);
// もとのタイムゾーンに戻ります: 2007-06-28 18:42:12+02:00
echo $now->format('%Y-%m-%d %H:%M:%S%O');
?> |
|
日付配列の並べ替え
Date オブジェクトの配列を作成したら、
それを並べ替えたくなるかもしれません。そんなときに使えるのが
compare
メソッドです。
例 40-5日付の並べ替え <?php
require_once 'Date.php';
$dates = array(
new Date('1813-02-23T05:34:23'),
new Date(),
new Date('1714-12-21T18:23:42'),
);
usort($dates, array('Date', 'compare'));
/*
* 日付を並べ替えて表示します
* 1714-12-21 18:23:42
* 1813-02-23 05:34:23
* 2007-06-28 20:59:39
*/
foreach ($dates as $date) {
echo $date->getDate() . "\n";
}
?> |
|