Php/docs/datetime.createfromformat

提供:Dev Guides
< Php
移動先:案内検索

DateTime::createFromFormat

date_create_from_format

(PHP 5 >= 5.3.0, PHP 7)

DateTime::createFromFormat -- date_create_from_format指定した書式で時刻文字列をパースする


説明

オブジェクト指向型

public static DateTime::createFromFormat ( string $format , string $datetime [, DateTimeZone $timezone ] ) : DateTime|false

手続き型

date_create_from_format ( string $format , string $datetime [, DateTimeZone $timezone ] ) : DateTime|false

新しい DateTime オブジェクトを返します。 このオブジェクトは、datetime で指定した文字列を format で指定した書式に沿って解釈した時刻を表します。


パラメータ

format

書式を文字列で渡します。以下の書式オプションを参照ください。 大半は、date() で使える文字と同じです。

format パラメータに渡せる文字
format 文字 説明 取りうる値の例
--- ---
d および j 2桁の日付。先頭のゼロを含むものと含まないもの 01 から 31 あるいは

1 から 31

D および l 曜日を表す文字列 Mon から Sun あるいは

Sunday から Saturday

S 日付の後につける英語の接尾辞。二文字。処理中には無視されます。 stndrd あるいは

th

z 年始からの通算日数 (最初は 0) 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
タイムゾーン --- ---
eO

P および T

タイムゾーン識別子、UTC からの時差 (時間単位)、

UTC からの時差 (コロン区切りでの時間と分)、そしてタイムゾーンの短縮形

例: UTCGMT

Atlantic/Azores+0200+02:00ESTMDT

完全な日付/時刻 --- ---
U Unix エポック (January 1 1970 00:00:00 GMT) からの経過秒数 例: 1292177455
空白および区切り --- ---
(空白) 空白 1 文字あるいはタブ 1 文字 例:
# 次の区切り文字のいずれか: ;,

:, /, ., ,, -, (, )

例: /
;,

:, /, ., ,, -, (, )

指定した文字 例: -
? ランダムなバイト 例: ^ (UTF-8 文字の場合は複数の

? が必要になるでしょう。この場合、おそらく * を使うと要望が満たせるはずです)

* 次の区切り文字あるいは数字までのランダムなバイト列 例: Y-*-d の中の *

は、文字列 2009-aWord-08 の中の aWord にマッチします

! すべてのフィールド (年、月、日、時、分、秒、マイクロ秒およびタイムゾーン情報)

を Unix エポックにリセットする

! がなければ、すべてのフィールドは現在の日時に設定されます。
| まだパースされていないすべてのフィールド (年、月、日、時、分、秒、マイクロ秒およびタイムゾーン情報)

を Unix エポックにリセットする

は、文字列をパースした結果から年月日を設定し

時分秒には 0 を設定します。

+ この文字があると、文字列のそれ以降のデータではエラーが発生せず、

かわりに警告を発生させる

それ以降のデータが存在したかどうかを調べるには DateTime::getLastErrors()

を使います。

書式文字列の中に解釈不能な文字が含まれていると処理は失敗し、 返り値にはエラーメッセージが付加されます。エラーメッセージを調べるには DateTime::getLastErrors() を使います。

format にリテラル文字を含めるには、 バックスラッシュ (\) でエスケープする必要があります。

format に文字 ! が含まれない場合は、作成した時刻値のうち format で指定されていない部分を 現在のシステム時刻で初期化します。

format に文字 ! が含まれる場合は、作成した時刻値のうち format で指定されていない部分と ! の左側の部分を Unix エポックの対応する箇所の値で初期化します。

Unix エポックは 1970-01-01 00:00:00 です。

datetime

時刻を表す文字列。

timezone

指定したいタイムゾーンを表す DateTimeZone オブジェクト。

timezone を省略し、かつ 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() の複雑な例

<?phpecho '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 リテラル文字を含む書式文字列

<?phpecho DateTime::createFromFormat('H\h i\m s\s','23h 15m 03s')->format('H:i:s');?>

上の例の出力は、 たとえば以下のようになります。


23:15:03

参考