(PHP 5 >= 5.2.0, PHP 7, PHP 8)
date_parse — 指定した日付/時刻の詳細な情報を連想配列で返す
$datetime
): array
date_parse() は、
strtotime() や
DateTimeImmutable::__construct()
と同じルールに従って
datetime
をパースします。
Unixタイムスタンプ (strtotime() の場合)
や DateTimeImmutable
(DateTimeImmutable::__construct() の場合)
を返す代わりに、指定した datetime
から検知できた情報を連想配列として返します。
あるグループの要素に関する情報が見つからなかった場合、
そうした情報は false
に設定されたり、存在しない状態になります。
datetime
に指定する文字列から、
同等のタイムスタンプや DateTimeImmutable
オブジェクトを構築する必要がある場合、
より多くのフィールドを false
でない値に設定できます。
そうしたことが起こる場合については、
以下に示す例を参照ください。
成功した場合に日付/時刻情報を含む配列、失敗した場合に false
を返します。
日付/時刻フォーマットにエラーがある場合は、 'errors' 要素にエラーメッセージが格納されます。
バージョン | 説明 |
---|---|
7.2.0 |
返される配列の zone 要素が、
分ではなく秒を表すようになり、
符号が逆になりました。
たとえば、
-120 は 7200 を表すようになります。
|
例1 datetime
に包括的な情報を指定した date_parse() の例
<?php
var_dump(date_parse("2006-12-12 10:00:00.5"));
?>
上の例の出力は以下となります。
array(12) { 'year' => int(2006) 'month' => int(12) 'day' => int(12) 'hour' => int(10) 'minute' => int(0) 'second' => int(0) 'fraction' => double(0.5) 'warning_count' => int(0) 'warnings' => array(0) { } 'error_count' => int(0) 'errors' => array(0) { } 'is_localtime' => bool(false) }
タイムゾーン情報が含まれた
datetime
がパースされた場合にのみ、
タイムゾーンの要素が含まれるようになります。
この場合、zone_type
要素が常に存在し、
値によっては少し多くの要素が含まれます。
例2 タイムゾーンの省略形を与えた場合の date_parse() の例
<?php
var_dump(date_parse("June 2nd, 2022, 10:28:17 BST"));
?>
上の例の出力は以下となります。
array(16) { 'year' => int(2022) 'month' => int(6) 'day' => int(2) 'hour' => int(10) 'minute' => int(28) 'second' => int(17) 'fraction' => double(0) 'warning_count' => int(0) 'warnings' => array(0) { } 'error_count' => int(0) 'errors' => array(0) { } 'is_localtime' => bool(true) 'zone_type' => int(2) 'zone' => int(0) 'is_dst' => bool(true) 'tz_abbr' => string(3) "BST" }
例3 タイムゾーン情報を与えた date_parse() の例
<?php
var_dump(date_parse("June 2nd, 2022, 10:28:17 Europe/London"));
?>
上の例の出力は以下となります。
array(14) { 'year' => int(2022) 'month' => int(6) 'day' => int(2) 'hour' => int(10) 'minute' => int(28) 'second' => int(17) 'fraction' => double(0) 'warning_count' => int(0) 'warnings' => array(0) { } 'error_count' => int(0) 'errors' => array(0) { } 'is_localtime' => bool(true) 'zone_type' => int(3) 'tz_id' => string(13) "Europe/London" }
さらに最低限の文字列を datetime
に与えてパースさせた場合、
情報量はさらに少なくなります。以下の例では、
全ての時刻に関する情報が false
になります。
例4 最低限の文字列だけを与えた date_parse() の例
<?php
var_dump(date_parse("June 2nd, 2022"));
?>
上の例の出力は以下となります。
array(12) { 'year' => int(2022) 'month' => int(6) 'day' => int(2) 'hour' => bool(false) 'minute' => bool(false) 'second' => bool(false) 'fraction' => bool(false) 'warning_count' => int(0) 'warnings' => array(0) { } 'error_count' => int(0) 'errors' => array(0) { } 'is_localtime' => bool(false) }
相対的な書式 は 絶対的な書式のパース結果に影響を及ぼさず、別途 "relative" 要素にまとめられます。
例5 "relative" フォーマットを使った date_parse() の例
<?php
var_dump(date_parse("2006-12-12 10:00:00.5 +1 week +1 hour"));
?>
上の例の出力は以下となります。
array(13) { 'year' => int(2006) 'month' => int(12) 'day' => int(12) 'hour' => int(10) 'minute' => int(0) 'second' => int(0) 'fraction' => double(0.5) 'warning_count' => int(0) 'warnings' => array(0) { } 'error_count' => int(0) 'errors' => array(0) { } 'is_localtime' => bool(false) 'relative' => array(6) { 'year' => int(0) 'month' => int(0) 'day' => int(7) 'hour' => int(1) 'minute' => int(0) 'second' => int(0) } }
Thursday
のように、
語句によっては、文字列の時刻の部分に 0
を設定するものがあります。
Thursday
を
DateTimeImmutable::__construct()
に与えた場合、hour, minute, second は
0
に設定されます。
以下の例では、year の要素は false
に設定されます。
例6 date_parse() の副作用
<?php
var_dump(date_parse("Thursday, June 2nd"));
?>
上の例の出力は以下となります。
array(13) { 'year' => bool(false) 'month' => int(6) 'day' => int(2) 'hour' => int(0) 'minute' => int(0) 'second' => int(0) 'fraction' => double(0) 'warning_count' => int(0) 'warnings' => array(0) { } 'error_count' => int(0) 'errors' => array(0) { } 'is_localtime' => bool(false) 'relative' => array(7) { 'year' => int(0) 'month' => int(0) 'day' => int(0) 'hour' => int(0) 'minute' => int(0) 'second' => int(0) 'weekday' => int(4) } }
datetime
をパースする DateTimeImmutable::parseFromFormat()