8.5. 日付関数全般用の定数

Zend_Date のメソッドでパラメータ $parts を持つものはすべて、以下の定数のいずれかをパラメータとして指定することができます。 これにより、日付の中の特定の要素や使用する書式 (例: RFC 822) を指定します。

8.5.1. 定数の使用

たとえば、定数Zend_Date::HOUR の使用法は次のようになります。 曜日・時・分・秒・その他の要素が世界各地でさまざまな形式で表されていたとしても、 オブジェクトのタイムゾーン設定を使用して自動的に正しい値で計算を行います。 これは、内部のタイムスタンプの値が何であるかや ユーザが世界中のどこにいるかとは関係がありません。 使用する単位にかかわらず、出力結果は GMT/UTC あるいはロケールにあわせて地域化された形式となります。 以下の出力サンプルは、 Europe/GMT+1 (ドイツ、オーストリア、フランスなど) にあわせて地域化された形式です。

表 8.7. Zend_Date::HOUR を使用した操作

関数/入力 説明 元の日付 使用後の出力
get(Zend_Date::HOUR) 時間を出力する 2009-02-13T14:53:27+01:00 14
set(12, Zend_Date::HOUR) 新しい時間を設定する 2009-02-13T14:53:27+01:00 2009-02-13T12:53:27+01:00
add(12, Zend_Date::HOUR) 時間を足す 2009-02-13T14:53:27+01:00 2009-02-14T02:53:27+01:00
sub(12, Zend_Date::HOUR) 時間を引く 2009-02-13T14:53:27+01:00 2009-02-13T02:53:27+01:00
compare(12, Zend_Date::HOUR) 時間を比較し、0 か 1 あるいは -1 を返す 2009-02-13T14:53:27+01:00 1 (オブジェクト > 引数 の場合)
copy(Zend_Date::HOUR) 時間部のみをコピーする 2009-02-13T14:53:27+01:00 1970-01-01T14:00:00+01:00
equals(14, Zend_Date::HOUR) 時間を比較し、TRUE あるいは FALSE を返す 2009-02-13T14:53:27+01:00 TRUE
isEarlier(12, Zend_Date::HOUR) 時間を比較し、TRUE あるいは FALSE を返す 2009-02-13T14:53:27+01:00 TRUE
isLater(12, Zend_Date::HOUR) 時間を比較し、TRUE あるいは FALSE を返す 2009-02-13T14:53:27+01:00 FALSE

8.5.2. 全定数の一覧

日付/時刻の各要素に対応する定数が Zend_Date で定義されています。 Zend_Date がサポートするすべての定数を以下に示します。

表 8.8. 日に関する定数

定数 説明 日付 影響を受ける部分の例
Zend_Date::DAY 日 (二桁の数値) 2009-02-06T14:53:27+01:00 2009-02-06T14:53:27+01:00 (06)
Zend_Date::DAY_SHORT 日 (一桁あるいは二桁の数値) 2009-02-06T14:53:27+01:00 2009-02-06T14:53:27+01:00 (6)
Zend_Date::WEEKDAY 曜日 (地域化された完全な曜日名) 2009-02-06T14:53:27+01:00 Friday
Zend_Date::WEEKDAY_SHORT 曜日 (地域化された曜日名の短縮形。三文字) 2009-02-06T14:53:27+01:00 Fre が金曜日を表す
Zend_Date::WEEKDAY_NAME 曜日 (地域化された曜日名の短縮形。二文字) 2009-02-06T14:53:27+01:00 Fr が金曜日を表す
Zend_Date::WEEKDAY_NARROW 曜日 (地域化された曜日名の短縮形。一文字) 2009-02-06T14:53:27+01:00 F が金曜日を表す
Zend_Date::WEEKDAY_DIGIT 曜日 (0 = 日曜日, 6 = 土曜日) 2009-02-06T14:53:27+01:00 5 が金曜日を表す
Zend_Date::WEEKDAY_8601 ISO 8601 にもとづく曜日 (1 = 月曜日, 7 = 日曜日) 2009-02-06T14:53:27+01:00 5 が金曜日を表す
Zend_Date::DAY_OF_YEAR 日数 (一桁あるいは二桁の数値) 2009-02-06T14:53:27+01:00 43
Zend_Date::DAY_SUFFIX 英語で日付の後に追加する文字 (st, nd, rd, th) 2009-02-06T14:53:27+01:00 th

表 8.9. 週に関する定数

定数 説明 日付 影響を受ける部分の例
Zend_Date::WEEK 週 (1 から 53 までの数値) 2009-02-06T14:53:27+01:00 7

表 8.10. 月に関する定数

定数 説明 日付 影響を受ける部分の例
Zend_Date::MONTH_NAME 月 (地域化された完全な月名) 2009-02-06T14:53:27+01:00 February
Zend_Date::MONTH_NAME_SHORT 月 (地域化された月名の短縮形。三文字) 2009-02-06T14:53:27+01:00 Feb
Zend_Date::MONTH_NAME_NARROW 月 (地域化された月名の短縮形。一文字) 2009-02-06T14:53:27+01:00 F
Zend_Date::MONTH 月 (二桁の月番号) 2009-02-06T14:53:27+01:00 2009-02-06T14:53:27+01:00 (02)
Zend_Date::MONTH_SHORT 月 (一桁あるいは二桁の月番号) 2009-02-06T14:53:27+01:00 2009-02-06T14:53:27+01:00 (2)
Zend_Date::MONTH_DAYS 当月の日数 (数値) 2009-02-06T14:53:27+01:00 28

表 8.11. 年に関する定数

定数 説明 日付 影響を受ける部分の例
Zend_Date::YEAR 年 (数値) 2009-02-06T14:53:27+01:00 2009-02-06T14:53:27+01:00
Zend_Date::YEAR_8601 ISO 8601 の年 (数値) 2009-02-06T14:53:27+01:00 2009
Zend_Date::YEAR_SHORT 年 (二桁の数値) 2009-02-06T14:53:27+01:00 2009-02-06T14:53:27+01:00
Zend_Date::YEAR_SHORT_8601 ISO 8601 の年 (二桁の数値) 2009-02-06T14:53:27+01:00 09
Zend_Date::LEAPYEAR 今年がうるう年かどうか? (TRUE あるいは FALSE) 2009-02-06T14:53:27+01:00 FALSE

表 8.12. 時間に関する定数

定数 説明 日付 影響を受ける部分の例
Zend_Date::HOUR 時 (00-23、二桁) 2009-02-06T14:53:27+01:00 14
Zend_Date::HOUR_SHORT 時 (0-23、一桁あるいは二桁) 2009-02-06T14:53:27+01:00 14
Zend_Date::HOUR_SHORT_AM 時 (1-12、一桁あるいは二桁) 2009-02-06T14:53:27+01:00 2
Zend_Date::HOUR_AM 時 (01-12、二桁) 2009-02-06T14:53:27+01:00 02
Zend_Date::MINUTE 分 (00-59、二桁) 2009-02-06T14:53:27+01:00 2009-02-06T14:53:27+01:00
Zend_Date::MINUTE_SHORT 分 (0-59、一桁あるいは二桁) 2009-02-06T14:03:27+01:00 2009-02-06T14:03:27+01:00
Zend_Date::SECOND 秒 (00-59、二桁) 2009-02-06T14:53:27+01:00 2009-02-06T14:53:27+01:00
Zend_Date::SECOND_SHORT 秒 (0-59、一桁あるいは二桁) 2009-02-06T14:53:07+01:00 2009-02-06T14:53:07+01:00
Zend_Date::MILLISECOND ミリ秒 (理論上は無限大) 2009-02-06T14:53:27.20546 2009-02-06T14:53:27.20546
Zend_Date::MERIDIEM その日の中での時間 (午前/午後) 2009-02-06T14:53:27+01:00 afternoon
Zend_Date::SWATCH Swatch Internet Time 2009-02-06T14:53:27+01:00 620

表 8.13. タイムゾーンに関する定数

定数 説明 日付 影響を受ける部分の例
Zend_Date::TIMEZONE タイムゾーン名 (省略形文字列) 2009-02-06T14:53:27+01:00 CET
Zend_Date::TIMEZONE_NAME タイムゾーン名 (文字列) 2009-02-06T14:53:27+01:00 Europe/Paris
Zend_Date::TIMEZONE_SECS GMT との時差を表す秒数 (integer) 2009-02-06T14:53:27+01:00 3600 seconds to GMT
Zend_Date::GMT_DIFF GMT との時差を表す秒数 (文字列) 2009-02-06T14:53:27+01:00 +0100
Zend_Date::GMT_DIFF_SEP GMT との時差を表す秒数 (文字列、分割形式) 2009-02-06T14:53:27+01:00 +01:00
Zend_Date::DAYLIGHT 夏時間かそうでないか? (TRUE あるいは FALSE) 2009-02-06T14:53:27+01:00 FALSE

表 8.14. 日付フォーマットに関する定数 (タイムゾーンを含むフォーマット)

定数 説明 日付 影響を受ける部分の例
Zend_Date::ISO_8601 ISO 8601 形式の日付 (文字列) 2009-02-13T14:53:27+01:00 2009-02-13T14:53:27+01:00
Zend_Date::RFC_2822 RFC 2822 形式の日付 (文字列) 2009-02-13T14:53:27+01:00 Fri, 13 Feb 2009 14:53:27 +0100
Zend_Date::TIMESTAMP Unix time (1970 年 1 月 1 日からの経過秒数) 2009-02-13T14:53:27+01:00 1234533207
Zend_Date::ATOM ATOM 形式の日付 (文字列) 2009-02-13T14:53:27+01:00 2009-02-13T14:53:27+01:00
Zend_Date::COOKIE クッキー形式の日付 (クッキー用の文字列) 2009-02-13T14:53:27+01:00 Friday, 13-Feb-09 14:53:27 Europe/Paris
Zend_Date::RFC_822 RFC 822 形式の日付 (文字列) 2009-02-13T14:53:27+01:00 Fri, 13 Feb 09 14:53:27 +0100
Zend_Date::RFC_850 RFC 850 形式の日付 (文字列) 2009-02-13T14:53:27+01:00 Friday, 13-Feb-09 14:53:27 Europe/Paris
Zend_Date::RFC_1036 RFC 1036 形式の日付 (文字列) 2009-02-13T14:53:27+01:00 Fri, 13 Feb 09 14:53:27 +0100
Zend_Date::RFC_1123 RFC 1123 形式の日付 (文字列) 2009-02-13T14:53:27+01:00 Fri, 13 Feb 2009 14:53:27 +0100
Zend_Date::RSS RSS フィード形式の日付 (文字列) 2009-02-13T14:53:27+01:00 Fri, 13 Feb 2009 14:53:27 +0100
Zend_Date::W3C HTML/HTTP 用の W3C 形式の日付 (文字列) 2009-02-13T14:53:27+01:00 2009-02-13T14:53:27+01:00

特に注意すべきなのは Zend_Date::DATES です。これは、 Zend_Date入力 フォーマットを指定する際に使用すると、特別な働きをします。 入力フォーマットとして $part で使用すると、 この定数は、さまざまな類似日付書式をできるだけ受け入れようとします。 経験則にもとづいて入力日付文字列を自動的に分解し、単純なエラーを (もしあれば) できるだけ修正します。たとえば年、月、日の順序がおかしい場合などです。

表 8.15. 日付および時刻フォーマットに関する定数 (ロケールによって変化する書式)

定数 説明 日付 影響を受ける部分の例
Zend_Date::ERA 時代 (地域化された文字列の短縮形) 2009-02-06T14:53:27+01:00 AD (紀元後)
Zend_Date::ERA_NAME 時代 (地域化された文字列の完全系) 2009-02-06T14:53:27+01:00 anno domini (紀元後)
Zend_Date::DATES 標準の日付 (地域化された文字列、デフォルト値) 2009-02-13T14:53:27+01:00 13.02.2009
Zend_Date::DATE_FULL 完全な日付 (地域化された文字列、完全形) 2009-02-13T14:53:27+01:00 Friday, 13. February 2009
Zend_Date::DATE_LONG 長い日付 (地域化された文字列、長い形式) 2009-02-13T14:53:27+01:00 13. February 2009
Zend_Date::DATE_MEDIUM 通常の日付 (地域化された文字列、通常の形式) 2009-02-13T14:53:27+01:00 13.02.2009
Zend_Date::DATE_SHORT 省略形の日付 (地域化された文字列、短縮形式) 2009-02-13T14:53:27+01:00 13.02.09
Zend_Date::TIMES 標準の時刻 (地域化された文字列、デフォルト値) 2009-02-13T14:53:27+01:00 14:53:27
Zend_Date::TIME_FULL 完全な時刻 (地域化された文字列、完全形) 2009-02-13T14:53:27+01:00 14:53 Uhr CET
Zend_Date::TIME_LONG 長い時刻 (地域化された文字列、長い形式) 2009-02-13T14:53:27+01:00 14:53:27 CET
Zend_Date::TIME_MEDIUM 通常の時刻 (地域化された文字列、通常の形式) 2009-02-13T14:53:27+01:00 14:53:27
Zend_Date::TIME_SHORT 省略形の時刻 (地域化された文字列、短縮形式) 2009-02-13T14:53:27+01:00 14:53

8.5.3. ISO 書式指定子を使用して自分で定義する出力フォーマット

上で示したもの意外の日付書式が必要な場合は、以下に示す ISO 書式トークンを使用して自分で書式を定義します。 以下の例は、下の表の定数を用いて独自の ISO 書式を作成する方法を示すものです。 書式の長さは無制限で、同じ定数を複数回使用してもかまいません。

もし PHP 風の日付書式のほうがなじみがあるのなら、 ISO 書式ではなく PHP の書式を用いるように変更することも可能です。 しかし、ISO で定められているすべての書式が PHP の日付書式で指定できるわけではありません。 Zend_Date::setOptions(array('format_type' => 'php')) メソッドを使用すると、 Zend_Date のメソッドで ISO 書式指定子ではなく PHP の date() での指定子を用いるようになります (以下の 項8.5.4. 「PHP の date() 関数の書式指定子を使用して自分で定義する出力フォーマット」 を参照ください)。

例 8.10. ISO 書式を使用した独自書式の例

<?php
require_once 'Zend/Date.php';

$locale = new Zend_Locale('de_AT');
$date = new Zend_Date(1234567890, false, $locale);
print $date->toString("'Era:GGGG='GGGG, ' Date:yy.MMMM.dd'yy.MMMM.dd");
?>

表 8.16. ISO 8601 日付出力 に関する定数

定数 説明 対応する要素 影響を受ける部分の例
G 時代 (地域化された省略形) Zend_Date::ERA AD
GG 時代 (地域化された省略形) Zend_Date::ERA AD
GGG 時代 (地域化された省略形) Zend_Date::ERA AD
GGGG 時代 (地域化された完全形) Zend_Date::ERA_NAME anno domini
GGGGG 時代 (地域化された省略形) Zend_Date::ERA a
y 年 (最低一桁) Zend_Date::YEAR 9
yy 年 (最低二桁) Zend_Date::YEAR_SHORT 09
yyy 年 (最低三桁) Zend_Date::YEAR 2009
yyyy 年 (最低四桁) Zend_Date::YEAR 2009
yyyyy 年 (最低五桁) Zend_Date::YEAR 02009
Y ISO 8601 形式の年 (最低一桁) Zend_Date::YEAR_8601 9
YY ISO 8601 形式の年 (最低二桁) Zend_Date::YEAR_SHORT_8601 09
YYY ISO 8601 形式の年 (最低三桁) Zend_Date::YEAR_8601 2009
YYYY ISO 8601 形式の年 (最低四桁) Zend_Date::YEAR_8601 2009
YYYYY ISO 8601 形式の年 (最低五桁) Zend_Date::YEAR_8601 02009
M 月 (一桁あるいは二桁) Zend_Date::MONTH_SHORT 2
MM 月 (二桁) Zend_Date::MONTH 02
MMM 月 (地域化された省略形) Zend_Date::MONTH_NAME_SHORT Feb
MMMM 月 (地域化された完全形) Zend_Date::MONTH_NAME February
MMMMM 月 (地域化された省略形、一桁) Zend_Date::MONTH_NAME_NARROW F
w 週 (一桁あるいは二桁) Zend_Date::WEEK 5
ww 週 (二桁) Zend_Date::WEEK 05
d その月の日付 (一桁あるいは二桁) Zend_Date::DAY_SHORT 9
dd その月の日付 (二桁) Zend_Date::DAY 09
D その年の日付 (一桁、二桁あるいは三桁) Zend_Date::DAY_OF_YEAR 7
DD その年の日付 (二桁あるいは三桁) Zend_Date::DAY_OF_YEAR 07
DDD その年の日付 (三桁) Zend_Date::DAY_OF_YEAR 007
E 曜日 (地域化された省略形、一文字) Zend_Date::WEEKDAY_NARROW M
EE 曜日 (地域化された省略形、二文字) Zend_Date::WEEKDAY_NAME Mo
EEE 曜日 (地域化された省略形、三文字) Zend_Date::WEEKDAY_SHORT Mon
EEEE 曜日 (地域化された完全形) Zend_Date::WEEKDAY Monday
EEEEE 曜日 (地域化された省略形、一桁) Zend_Date::WEEKDAY_NARROW M
e 曜日番号 (一桁) Zend_Date::WEEKDAY_NARROW 4
ee 曜日番号 (二桁) Zend_Date::WEEKDAY_NARROW 04
a 午前/午後 (地域化された形式) Zend_Date::MERIDIEM vorm.
h 時間 (1-12) (一桁あるいは二桁) Zend_Date::HOUR_SHORT_AM 2
hh 時間 (01-12) (二桁) Zend_Date::HOUR_AM 02
H 時間 (0-23) (一桁あるいは二桁) Zend_Date::HOUR_SHORT 2
HH 時間 (00-23) (二桁) Zend_Date::HOUR 02
m 分 (0-59) (一桁あるいは二桁) Zend_Date::MINUTE_SHORT 2
mm 分 (00-59) (二桁) Zend_Date::MINUTE 02
s 秒 (0-59) (一桁あるいは二桁) Zend_Date::SECOND_SHORT 2
ss 秒 (00-59) (二桁) Zend_Date::SECOND 02
S ミリ秒 Zend_Date::MILLISECOND 20536
z タイムゾーン (地域化された省略形) Zend_Date::TIMEZONE CET
zz タイムゾーン (地域化された省略形) Zend_Date::TIMEZONE CET
zzz タイムゾーン (地域化された省略形) Zend_Date::TIMEZONE CET
zzzz タイムゾーン (地域化された完全形) Zend_Date::TIMEZONE_NAME Europe/Paris
Z タイムゾーンの時差 Zend_Date::GMT_DIFF +0100
ZZ タイムゾーンの時差 Zend_Date::GMT_DIFF +0100
ZZZ タイムゾーンの時差 Zend_Date::GMT_DIFF +0100
ZZZZ タイムゾーンの時差 (分割形式) Zend_Date::GMT_DIFF_SEP +01:00
A ミリ秒 Zend_Date::MILLISECOND 20563

8.5.4. PHP の date() 関数の書式指定子を使用して自分で定義する出力フォーマット

もし PHP の日付書式指定子のほうが ISO 書式指定子よりなじみがあるのなら、 Zend_Date::setOptions('format' => 'php') を使用しましょう。これで、 Zend_Date のメソッドで ISO 書式指定子ではなく PHP の date() での指定子を用いるようになります その後の書式パラメータは、すべて PHP の date() 書式指定子 に従うようになります。PHP の日付書式には含まれていないけれども ISO の書式には含まれるもの、 またその逆もあります。もしそれほど PHP の日付書式になじみがないのなら、標準の ISO 書式を使用しましょう。既存のコードで PHP の日付書式をしているものがある場合は Zend_Locale_Format::convertPhpToIsoFormat() で ISO 書式に変換するか、setOptions() を使用します。次の例は、下の表の定数を用いて独自の書式を定義するものです。

例 8.11. PHP の指定子を使用した独自書式の例

<?php
require_once 'Zend/Date.php';

$locale = new Zend_Locale('de_AT');
Zend_Date::setOptions('format_type' => 'php');
$date = new Zend_Date(1234567890, false, $locale);

// 出力は 'February 16, 2007, 3:36 am' のようになります
print $date->toString('F j, Y, g:i a');

print $date->toString("'Format:D M j G:i:s T Y='D M j G:i:s T Y");
?>

次の表は、PHP の日付書式指定子とそれに対応する Zend_Date の定数、 そして同等な CLDR/ISO 書式指定子を示したものです。 たいていの場合は、もし CLDR/ISO 書式に同等のものがなければ Zend_Locale_Format::convertPhpToIsoFormat() で PHP の書式指定子がそのまま残されます。そして Zend_Date のメソッドは、たとえ "ISO" 書式モードであったとしても、これらの PHP "独特の" 書式指定を理解します。

表 8.17. PHP の日付出力 用の定数

定数 説明 対応する要素 CLDR での同等の指定子 影響する部分/例
d その月の日付 (二桁) Zend_Date::DAY dd 09
D 曜日 (地域化された省略形、三文字) Zend_Date::WEEKDAY_SHORT EEE Mon
j その月の日付 (一桁あるいは二桁) Zend_Date::DAY_SHORT d 9
l (小文字の L) 曜日 (地域化された完全形) Zend_Date::WEEKDAY EEEE Monday
N 曜日番号 (一桁) Zend_Date::WEEKDAY_8601 e 4
S 英語の日付の後につける接尾辞 (二文字) なし なし st
w 曜日番号 (0=日曜日、6=土曜日) Zend_Date::WEEKDAY_DIGIT なし 4
z その年の日付 (一桁、二桁あるいは三桁) Zend_Date::DAY_OF_YEAR D 7
W 週 (一桁あるいは二桁) Zend_Date::WEEK w 5
F 月 (地域化された完全形) Zend_Date::MONTH_NAME MMMM February
m 月 (二桁) Zend_Date::MONTH MM 02
M 月 (地域化された省略形) Zend_Date::MONTH_NAME_SHORT MMM Feb
n 月 (一桁あるいは二桁) Zend_Date::MONTH_SHORT M 2
t その月の日数 (一桁あるいは二桁) Zend_Date::MONTH_DAYS なし 30
L うるう年かどうか Zend_Date::LEAPYEAR なし true
o ISO 8601 形式の年 (最低四桁) Zend_Date::YEAR_8601 YYYY 2009
Y 年 (最低四桁) Zend_Date::YEAR yyyy 2009
y 年 (最低二桁) Zend_Date::YEAR_SHORT yy 09
a 午前/午後 (地域化された形式) Zend_Date::MERIDIEM a (sort of, but likely to be uppercase) vorm.
A 午前/午後 (地域化された形式) Zend_Date::MERIDIEM a (sort of, but no guarantee that the format is uppercase) VORM.
B Swatch インターネット時間 Zend_Date::SWATCH なし 1463
g 時間 (1-12) (一桁あるいは二桁) Zend_Date::HOUR_SHORT_AM h 2
G 時間 (0-23) (一桁あるいは二桁) Zend_Date::HOUR_SHORT H 2
h 時間 (01-12) (二桁) Zend_Date::HOUR_AM hh 02
H 時間 (00-23) (二桁) Zend_Date::HOUR HH 02
i 分 (00-59) (二桁) Zend_Date::MINUTE mm 02
s 秒 (00-59) (二桁) Zend_Date::SECOND ss 02
e タイムゾーン (地域化された完全形) Zend_Date::TIMEZONE_NAME zzzz Europe/Paris
I 夏時間 Zend_Date::DAYLIGHT なし 1
O タイムゾーンの時差 Zend_Date::GMT_DIFF Z、ZZ あるいは ZZZ +0100
P タイムゾーンの時差 (分割形式) Zend_Date::GMT_DIFF_SEP ZZZZ +01:00
T タイムゾーン (地域化された省略形) Zend_Date::TIMEZONE z、zz あるいは zzz CET
Z タイムゾーンの時差秒数 Zend_Date::TIMEZONE_SECS なし 3600
c 標準の Iso 書式の出力 Zend_Date::ISO_8601 なし 2004-02-12T15:19:21+00:00
r 標準の Rfc 2822 書式の出力 Zend_Date::RFC_2822 なし Thu, 21 Dec 2000 16:01:07 +0200
U Unix タイムスタンプ Zend_Date::TIMESTAMP なし 15275422364