日付関数全般用の定数
Zend_Date のメソッドでパラメータ $parts
を持つものはすべて、以下の定数のいずれかをパラメータとして指定できます。
これにより、日付の中の特定の要素や使用する書式
(例: RFC 822) を指定します。
定数の使用
たとえば、定数Zend_Date::HOUR の使用法は次のようになります。
曜日・時・分・秒・その他の要素が世界各地でさまざまな形式で表されていたとしても、
オブジェクトのタイムゾーン設定を使用して自動的に正しい値で計算を行います。
これは、内部のタイムスタンプの値が何であるかや
ユーザが世界中のどこにいるかとは関係がありません。
使用する単位にかかわらず、出力結果は GMT あるいは UTC
あるいはロケールにあわせて地域化された形式となります。
以下の出力サンプルは、
Europe/GMT+1 (ドイツ、オーストリア、フランスなど)
にあわせて地域化された形式です。
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
全定数の一覧
日付/時刻の各要素に対応する定数が Zend_Date で定義されています。
Zend_Date がサポートするすべての定数を以下に示します。
日に関する定数
定数
説明
日付
結果
Zend_Date::DAY
日 (二桁の数値)
2009-02-13T14:53:27+01:00
13
Zend_Date::DAY_SHORT
日 (一桁あるいは二桁の数値)
2009-02-13T14:53:27+01:00
6
Zend_Date::WEEKDAY
曜日 (地域化された完全な曜日名)
2009-02-13T14:53:27+01:00
Friday
Zend_Date::WEEKDAY_SHORT
曜日 (地域化された曜日名の短縮形。2ないし4文字)
2009-02-13T14:53:27+01:00
Fri が金曜日を表す
Zend_Date::WEEKDAY_NAME
曜日 (地域化された曜日名の短縮形。1ないし2文字)
2009-02-13T14:53:27+01:00
Fr が金曜日を表す
Zend_Date::WEEKDAY_NARROW
曜日 (地域化された曜日名の短縮形。一文字)
2009-02-13T14:53:27+01:00
F が金曜日を表す
Zend_Date::WEEKDAY_DIGIT
曜日 (0 = 日曜日, 6 = 土曜日)
2009-02-13T14:53:27+01:00
5 が金曜日を表す
Zend_Date::WEEKDAY_8601
ISO 8601 にもとづく曜日 (1 = 月曜日, 7 = 日曜日)
2009-02-13T14:53:27+01:00
5 が金曜日を表す
Zend_Date::DAY_OF_YEAR
日数 (一桁あるいは二桁の数値)
2009-02-13T14:53:27+01:00
43
Zend_Date::DAY_SUFFIX
英語で日付の後に追加する文字 (st, nd, rd, th)
2009-02-13T14:53:27+01:00
th
週に関する定数
定数
説明
日付
結果
Zend_Date::WEEK
週 (1 から 53 までの数値)
2009-02-13T14:53:27+01:00
7
月に関する定数
定数
説明
日付
結果
Zend_Date::MONTH_NAME
月 (地域化された完全な月名)
2009-02-13T14:53:27+01:00
February
Zend_Date::MONTH_NAME_SHORT
月 (地域化された月名の短縮形。2ないし4文字)
2009-02-13T14:53:27+01:00
Feb
Zend_Date::MONTH_NAME_NARROW
月 (地域化された月名の短縮形。1ないし2文字)
2009-02-13T14:53:27+01:00
F
Zend_Date::MONTH
月 (二桁の月番号)
2009-02-13T14:53:27+01:00
02
Zend_Date::MONTH_SHORT
月 (一桁あるいは二桁の月番号)
2009-02-13T14:53:27+01:00
2
Zend_Date::MONTH_DAYS
当月の日数 (数値)
2009-02-13T14:53:27+01:00
28
年に関する定数
定数
説明
日付
結果
Zend_Date::YEAR
年 (数値)
2009-02-13T14:53:27+01:00
2009
Zend_Date::YEAR_8601
ISO 8601 の年 (数値)
2009-02-13T14:53:27+01:00
2009
Zend_Date::YEAR_SHORT
年 (二桁の数値)
2009-02-13T14:53:27+01:00
09
Zend_Date::YEAR_SHORT_8601
ISO 8601 の年 (二桁の数値)
2009-02-13T14:53:27+01:00
09
Zend_Date::LEAPYEAR
今年がうるう年かどうか? (TRUE あるいは FALSE)
2009-02-13T14:53:27+01:00
FALSE
時間に関する定数
定数
説明
日付
結果
Zend_Date::HOUR
時 (00-23、二桁)
2009-02-13T14:53:27+01:00
14
Zend_Date::HOUR_SHORT
時 (0-23、一桁あるいは二桁)
2009-02-13T14:53:27+01:00
14
Zend_Date::HOUR_SHORT_AM
時 (1-12、一桁あるいは二桁)
2009-02-13T14:53:27+01:00
2
Zend_Date::HOUR_AM
時 (01-12、二桁)
2009-02-13T14:53:27+01:00
02
Zend_Date::MINUTE
分 (00-59、二桁)
2009-02-13T14:53:27+01:00
53
Zend_Date::MINUTE_SHORT
分 (0-59、一桁あるいは二桁)
2009-02-13T14:03:27+01:00
3
Zend_Date::SECOND
秒 (00-59、二桁)
2009-02-13T14:53:27+01:00
27
Zend_Date::SECOND_SHORT
秒 (0-59、一桁あるいは二桁)
2009-02-13T14:53:07+01:00
7
Zend_Date::MILLISECOND
ミリ秒 (理論上は無限大)
2009-02-13T14:53:27.20546
20546
Zend_Date::MERIDIEM
その日の中での時間 (午前/午後)
2009-02-13T14:53:27+01:00
afternoon
Zend_Date::SWATCH
Swatch Internet Time
2009-02-13T14:53:27+01:00
620
タイムゾーンに関する定数
定数
説明
日付
結果
Zend_Date::TIMEZONE
タイムゾーン名 (省略形文字列)
2009-02-13T14:53:27+01:00
CET
Zend_Date::TIMEZONE_NAME
タイムゾーン名 (文字列)
2009-02-13T14:53:27+01:00
Europe/Paris
Zend_Date::TIMEZONE_SECS
GMT との時差を表す秒数 (integer)
2009-02-13T14:53:27+01:00
3600 seconds to GMT
Zend_Date::GMT_DIFF
GMT との時差を表す秒数 (文字列)
2009-02-13T14:53:27+01:00
+0100
Zend_Date::GMT_DIFF_SEP
GMT との時差を表す秒数 (文字列、分割形式)
2009-02-13T14:53:27+01:00
+01:00
Zend_Date::DAYLIGHT
夏時間かそうでないか? (TRUE あるいは FALSE)
2009-02-13T14:53:27+01:00
FALSE
日付フォーマットに関する定数 (タイムゾーンを含むフォーマット)
定数
説明
日付
結果
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::RFC_3339
Date according to RFC 3339 (string)
2009-02-13T14:53:27+01:00
2009-02-13T14:53:27+01:00
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 で使用すると、
この定数は、さまざまな類似日付書式をできるだけ受け入れようとします。
経験則にもとづいて入力日付文字列を自動的に分解し、単純なエラーを (もしあれば)
できるだけ修正します。たとえば年、月、日の順序がおかしい場合などです。
日付および時刻フォーマットに関する定数 (ロケールによって変化する書式)
定数
説明
日付
結果
Zend_Date::ERA
時代 (地域化された文字列の短縮形)
2009-02-13T14:53:27+01:00
AD (紀元後)
Zend_Date::ERA_NAME
時代 (地域化された文字列の完全系)
2009-02-13T14: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
Zend_Date::DATETIME
標準の日付・時刻 (地域化された文字列、デフォルト値)
2009-02-13T14:53:27+01:00
13.02.2009 14:53:27
Zend_Date::DATETIME_FULL
完全な日付・時刻 (地域化された文字列、完全な形式)
2009-02-13T14:53:27+01:00
Friday, 13. February 2009 14:53 Uhr CET
Zend_Date::DATETIME_LONG
長い日付・時刻 (地域化された文字列、長い形式)
2009-02-13T14:53:27+01:00
13. February 2009 14:53:27 CET
Zend_Date::DATETIME_MEDIUM
通常の日付・時刻 (地域化された文字列、通常の形式)
2009-02-13T14:53:27+01:00
13.02.2009 14:53:27
Zend_Date::DATETIME_SHORT
省略形の日付・時刻 (地域化された文字列、短縮形式)
2009-02-13T14:53:27+01:00
13.02.09 14:53
ISO 書式指定子を使用して自分で定義する出力フォーマット
上で示したもの意外の日付書式が必要な場合は、以下に示す
ISO 書式トークンを使用して自分で書式を定義します。
以下の例は、下の表の定数を用いて独自の ISO 書式を作成する方法を示すものです。
書式の長さは無制限で、同じ定数を複数回使用してもかまいません。
もし PHP 風の日付書式のほうがなじみがあるのなら、
ISO 書式ではなく PHP の書式を用いるように変更することも可能です。
しかし、ISO で定められているすべての書式が PHP の日付書式で指定できるわけではありません。
Zend_Date::setOptions(array('format_type' => 'php')) メソッドを使用すると、
Zend_Date のメソッドで ISO 書式指定子ではなく PHP の date() での指定子を用いるようになります
(以下の PHP の date() 関数の書式指定子を使用して
自分で定義する出力フォーマット を参照ください)。
ISO 書式を使用した独自書式
toString("'Era:GGGG='GGGG, ' Date:yy.MMMM.dd'yy.MMMM.dd");
]]>
デフォルトの ISO フォーマットは、PHP のフォーマットとは異なることに注意しましょう。
これまでに使ったことがない方は、少々いらいらするかもしれません。
特に、「年」と「分」
に関する指定子については、なかなか期待通りに動作しないことでしょう。
「年」
については、間違えやすい指定子がふたつあります。
ISO 形式の年を表す Y 指定子と、
実際の年を表す y 指定子です。
両者の違いは些細なものではありますが、非常に重要です。
Y は ISO 形式の年を算出するものです。
これは、カレンダーを作成する際によく用いられます。
2007 年 12 月 31 日を例にとって考えてみましょう。
実際の年は 2007 ですが、この日は
2008 年の最初の週 (第 1 週) の最初の日でもあります。
したがって、'dd.MM.yyyy' として場合は '31.December.2007'
が得られますが、'dd.MM.YYYY' とした場合の結果は '31.December.2008'
となるのです。これはバグではなく、期待通りの振る舞いです。
これが、ふたつの指定子の違いとなります。
「分」
の場合は、違いはそれほど大きくはありません。ISO では「分」
を表す指定子として m
を使用します。PHP が使っている i
ではありません。分を取得する書式指定をする際には、
正しい指定子を使っているかどうかを確認するようにしましょう。
PHP の date() 関数の書式指定子を使用して自分で定義する出力フォーマット
もし PHP の日付書式指定子のほうが ISO 書式指定子よりなじみがあるのなら、
Zend_Date::setOptions(array('format_type' => 'php')) を使用しましょう。これで、
Zend_Date のメソッドで ISO 書式指定子ではなく PHP の date() での指定子を用いるようになります
その後の書式パラメータは、すべて
PHP の date() 書式指定子
に従うようになります。PHP の日付書式には含まれていないけれども ISO の書式には含まれるもの、
またその逆もあります。もしそれほど PHP の日付書式になじみがないのなら、標準の
ISO 書式を使用しましょう。既存のコードで PHP の日付書式をしているものがある場合は
Zend_Locale_Format::convertPhpToIsoFormat()
で ISO 書式に変換するか、setOptions()
を使用します。次の例は、下の表の定数を用いて独自の書式を定義するものです。
PHP の指定子を使用した独自書式
'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 の定数は
ISO 記法を使っているということに注意しましょう。
つまり、Zend_Date で PHP
記法を使うように設定している場合は、Zend_Date
の定数は使えません。自分で書式を定義する必要があります。
この忠告に従わなければ、予期せぬ結果を得ることになるでしょう。
次の表は、PHP の日付書式指定子とそれに対応する Zend_Date の定数、
そして同等な CLDR/ISO 書式指定子を示したものです。
たいていの場合は、もし CLDR/ISO 書式に同等のものがなければ
Zend_Locale_Format::convertPhpToIsoFormat()
で PHP の書式指定子がそのまま残されます。そして Zend_Date
のメソッドは、たとえ "ISO" 書式モードであったとしても、これらの
PHP "独特の" 書式指定を理解します。