(PHP 5 >= 5.3.0, PHP 7, PHP 8)
DateTime::createFromFormat -- date_create_from_format — 指定した書式で時刻文字列をパースする
オブジェクト指向型
$format
, string $datetime
, ?DateTimeZone $timezone
= null
): DateTime|false手続き型
$format
, string $datetime
, ?DateTimeZone $timezone
= null
): DateTime|false
新しい DateTime オブジェクトを返します。
このオブジェクトは、datetime
で指定した文字列を
format
で指定した書式に沿って解釈した時刻を表します。
format
書式を文字列で渡します。以下の書式オプションを参照ください。 大半は、date() で使える文字と同じです。
format 文字 |
説明 | 取りうる値の例 |
---|---|---|
日 | --- | --- |
d および j |
2桁の日付。先頭のゼロを含むものと含まないもの |
01 から 31 あるいは
1 から 31
|
D および l |
曜日を表す文字列 |
Mon から Sun あるいは
Sunday から Saturday
|
S |
日付の後につける英語の接尾辞。二文字。処理中には無視されます。 |
st 、nd 、rd あるいは
th
|
z |
年始からの通算日数 (最初は 0)。
Y または y
の後に続けて置かなければいけません。
|
0 から 365 |
月 | --- | --- |
F および M |
月を表す文字列。January あるいは Sept など |
January から December あるいは
Jan から Dec
|
m および n |
月を表す数値。先頭のゼロを含むものと含まないもの |
01 から 12 あるいは
1 から 12
|
年 | --- | --- |
Y |
4 桁の数値で表した年 | 例: 1999 あるいは 2003 |
y |
2 桁の数値で表した年 (1970年から2069年の間だとみなされます) |
例:
99 あるいは 03
(それぞれ、 1999 および
2003 と見なされます)
|
時刻 | --- | --- |
a および A |
午前および午後 | am あるいは pm |
g および h |
12 時間制での時間。先頭のゼロを含むものと含まないもの |
1 から 12 あるいは
01 から 12
|
G and H |
24 時間制での時間。先頭のゼロを含むものと含まないもの |
0 から 23 あるいは
00 から 23
|
i |
分。先頭のゼロを含む | 00 から 59 |
s |
秒。先頭のゼロを含む | 00 から 59 |
v |
ミリ秒。(最大 3桁) | 例: 12 , 345 |
u |
マイクロ秒 (最大 6 桁) | 例: 45 , 654321 |
タイムゾーン | --- | --- |
e 、O 、
P および T
|
タイムゾーン識別子、UTC からの時差 (時間単位)、 UTC からの時差 (コロン区切りでの時間と分)、そしてタイムゾーンの短縮形 | 例: UTC 、GMT 、
Atlantic/Azores 、
+0200 、+02:00 、
EST 、MDT
|
完全な日付/時刻 | --- | --- |
U |
Unix エポック (January 1 1970 00:00:00 GMT) からの経過秒数 | 例: 1292177455 |
空白および区切り | --- | --- |
(空白) |
空白 1 文字あるいはタブ 1 文字 | 例: |
# |
次の区切り文字のいずれか: ; ,
: , / , . ,
, , - , ( ,
)
|
例: / |
; ,
: , / , . ,
, , - , ( ,
)
|
指定した文字 | 例: - |
? |
ランダムなバイト | 例: ^ (UTF-8 文字の場合は複数の
? が必要になるでしょう。この場合、おそらく
* を使うと要望が満たせるはずです) |
* |
次の区切り文字あるいは数字までのランダムなバイト列 | 例: Y-*-d の中の *
は、文字列 2009-aWord-08 の中の
aWord にマッチします |
! |
すべてのフィールド
(年、月、日、時、分、秒、マイクロ秒およびタイムゾーン情報)
を ゼロ相当の値
(時、分、秒、マイクロ秒については 0 。
月、日については 1 。
年については 1970 。
タイムゾーンについては UTC )
にリセットします。
|
! がなければ、すべてのフィールドは現在の日時に設定されます。 |
| |
まだパースされていないすべてのフィールド (年、月、日、時、分、秒、マイクロ秒およびタイムゾーン情報) を ゼロ相当の値にリセットします。 | Y-m-d| は、文字列をパースした結果から年月日を設定し
時分秒には 0 を設定します。 |
+ |
この文字があると、文字列のそれ以降のデータではエラーが発生せず、 かわりに警告を発生させる | それ以降のデータが存在したかどうかを調べるには DateTime::getLastErrors() を使います。 |
書式文字列の中に解釈不能な文字が含まれていると処理は失敗し、 戻り値にはエラーメッセージが付加されます。エラーメッセージを調べるには DateTime::getLastErrors() を使います。
format
にリテラル文字を含めるには、
バックスラッシュ (\
) でエスケープする必要があります。
format
に文字
!
が含まれない場合は、作成した時刻値のうち
format
で指定されていない部分を
現在のシステム時刻で初期化します。
format
に文字
!
が含まれる場合は、作成した時刻値のうち
format
で指定されていない部分と
!
の左側の部分を
Unix エポックの対応する箇所の値で初期化します。
Unix エポックは 1970-01-01 00:00:00 です。
datetime
時刻を表す文字列。
timezone
指定したいタイムゾーンを表す DateTimeZone オブジェクト。
timezone
を省略されるか、または null
の場合、
かつ datetime
にタイムゾーンが含まれない場合は、
現在のタイムゾーンを使います。
注意:
datetime
パラメータが UNIX タイムスタンプ (例:946684800
) だったり、タイムゾーンを含んでいたり (例:2010-01-28T15:00:00+02:00
) する場合は、timezone
パラメータや現在のタイムゾーンは無視します。
新しい DateTime のインスタンス、失敗した場合に false
を返します。
バージョン | 説明 |
---|---|
7.3.0 |
書式文字列 v が追加されました。
|
例1 DateTime::createFromFormat() の例
オブジェクト指向型
<?php
$date = DateTime::createFromFormat('j-M-Y', '15-Feb-2009');
echo $date->format('Y-m-d');
?>
手続き型
<?php
$date = date_create_from_format('j-M-Y', '15-Feb-2009');
echo date_format($date, 'Y-m-d');
?>
上の例の出力は以下となります。
2009-02-15
例2 DateTime::createFromFormat() の複雑な例
<?php
echo 'Current time: ' . date('Y-m-d H:i:s') . "\n";
$format = 'Y-m-d';
$date = DateTime::createFromFormat($format, '2009-02-15');
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n";
$format = 'Y-m-d H:i:s';
$date = DateTime::createFromFormat($format, '2009-02-15 15:16:17');
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n";
$format = 'Y-m-!d H:i:s';
$date = DateTime::createFromFormat($format, '2009-02-15 15:16:17');
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n";
$format = '!d';
$date = DateTime::createFromFormat($format, '15');
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n";
?>
上の例の出力は、 たとえば以下のようになります。
Current time: 2010-04-23 10:29:35 Format: Y-m-d; 2009-02-15 10:29:35 Format: Y-m-d H:i:s; 2009-02-15 15:16:17 Format: Y-m-!d H:i:s; 1970-01-15 15:16:17 Format: !d; 1970-01-15 00:00:00
例3 リテラル文字を含む書式文字列
<?php
echo DateTime::createFromFormat('H\h i\m s\s','23h 15m 03s')->format('H:i:s');
?>
上の例の出力は、 たとえば以下のようになります。
23:15:03