第7章 標準クラスライブラリ / 第1回 模擬試験
PHPの`DateTime`クラスに関する次の記述のうち、正しいものはどれか。
`DateTime`オブジェクトは、現在の日時を取得できない。
`format()`メソッドは、`DateTime`オブジェクトの日時を指定のフォーマットで整形する。
正解
`add()`メソッドは、`DateTime`オブジェクトから時間を減算する。
`diff()`メソッドは、2つの`DateTime`オブジェクトの差分を計算できない。
解説
`format()`メソッドは、`DateTime`オブジェクトが保持する日時を、指定した書式文字列(`Y-m-d H:i:s`など)に整形して文字列で返します。
他の選択肢が誤りである理由は次の通りです。
・`new DateTime()`は引数を省略すると現在日時でインスタンス化されるため、「現在の日時を取得できない」というのは誤りです。
・`add()`は`DateInterval`を加算するメソッドで、減算は`sub()`が担当します。
・`diff()`は2つの`DateTime`の差を`DateInterval`オブジェクトとして返すため、「計算できない」は誤りです。
例:
```
$start = new DateTime('2026-01-01');
$end = new DateTime('2026-03-15');
$diff = $start->diff($end);
echo $diff->days; // 73
```
実務では、意図せず元のオブジェクトが書き換わる`DateTime`の可変性がバグの原因になりやすいため、`DateTimeImmutable`を使い分ける設計もよく使われます。
(参照: 独習PHP 第4版 第7章 標準クラスライブラリ 7.2節 DateTimeクラス p.313〜322)