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_DIGIT 月 (一桁あるいは二桁の月番号) 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 8601 形式で対応できるでしょう。 しかし、ISO 形式ですべてが対応できるわけではありません。 フォーマット文字列の長さは無制限です。 また、同じ定数を複数回使用してもかまいません。 次の例は、以下の表にまとめたフォーマット定数を使用して自分でフォーマットを定義するものです。

例 8.10. 自分で定義するフォーマットの例

<?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_DIGIT 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