日付・時間

PHPのdate_format関数の使用方法と書式設定について解説

PHPのdate_format関数は、DateTimeオブジェクトが持つ日付や時間を指定した書式に変換するために利用します。

たとえば、Ymd日やHis秒といった形式にカスタマイズできる点が魅力です。

この記事では、基本的な使い方や注意点を分かりやすく解説します。

基本的な使い方

DateTimeオブジェクトの生成方法

PHPで日付と時刻を扱う場合、まずはDateTimeオブジェクトを生成します。

下記の例は、現在の日付と時刻を取得する方法です。

<?php
// 現在日時のDateTimeオブジェクトを生成する
$currentDateTime = new DateTime();
echo $currentDateTime->format('Y-m-d H:i:s');  // フォーマット例:2023-10-05 14:30:00
?>
2023-10-05 14:30:00

date_format関数の基本構文

date_format関数は、DateTimeオブジェクトを指定したフォーマットの文字列に変換します。

基本的な構文は以下の通りです。

<?php
// DateTimeオブジェクトの生成
$dateTimeObject = new DateTime();
// 日付と時刻のフォーマット変換
$formattedDate = date_format($dateTimeObject, 'Y-m-d H:i:s');
echo $formattedDate;
?>
2023-10-05 14:30:00

主要なフォーマット指定文字の利用例

date_format関数で使用する書式指定子には、日付や時刻を分かりやすい形式に変換するための様々な文字が用意されています。

例えば、Yは西暦4桁、mは2桁の月、dは2桁の日、Hは24時間形式の時間などがあります。

主な指定文字は以下のリストを参考にしてください。

  • Y: 西暦4桁の年
  • y: 西暦下2桁の年
  • m: 2桁の月(先頭に0が付く)
  • d: 2桁の日(先頭に0が付く)
  • H: 24時間形式の時間
  • h: 12時間形式の時間
  • i: 分(2桁)
  • s: 秒(2桁)

書式指定文字の詳細解説

日付のフォーマット指定

年(Yy)の違い

Yは4桁の年を表示し、例えば「2023」のように表現されます。

一方、yは下2桁を表示し、「23」となります。

下記の例で違いを確認してください。

<?php
$dateTimeObject = new DateTime('2023-10-05');
// 4桁の年
$yearFull = date_format($dateTimeObject, 'Y');
// 2桁の年
$yearShort = date_format($dateTimeObject, 'y');
echo "年(4桁): " . $yearFull . "\n";
echo "年(2桁): " . $yearShort . "\n";
?>
年(4桁): 2023
年(2桁): 23

月と日の指定方法(md)

mdはどちらも2桁で表示され、先頭に0を付けるため、常に同じ幅で表示されます。

例えば、月が「5」の場合は05となります。

以下の例を参照してください。

<?php
$dateTimeObject = new DateTime('2023-05-09');
// 月の指定例
$month = date_format($dateTimeObject, 'm');
// 日の指定例
$day = date_format($dateTimeObject, 'd');
echo "月: " . $month . "\n";
echo "日: " . $day . "\n";
?>
月: 05
日: 09

時刻のフォーマット指定

時間の指定方法(Hh)

Hは24時間形式の時間を表示し、0から23までの値を出力します。

一方、hは12時間形式の時間を表示し、1から12までの値となります。

以下のコード例では、両者の違いを確認することができます。

<?php
$dateTimeObject = new DateTime('2023-10-05 15:45:30');
// 24時間形式
$hour24 = date_format($dateTimeObject, 'H');
// 12時間形式
$hour12 = date_format($dateTimeObject, 'h');
echo "24時間形式: " . $hour24 . "\n";
echo "12時間形式: " . $hour12 . "\n";
?>
24時間形式: 15
12時間形式: 03

分と秒の指定方法(is)

iは分を、sは秒を2桁で表現します。

常に2桁で表示されるため、例えば分が「7」の場合は07、秒も同様に07となります。

<?php
$dateTimeObject = new DateTime('2023-10-05 15:07:05');
// 分と秒の表示
$minute = date_format($dateTimeObject, 'i');
$second = date_format($dateTimeObject, 's');
echo "分: " . $minute . "\n";
echo "秒: " . $second . "\n";
?>
分: 07
秒: 05

その他のフォーマットオプション

date_format関数では、上記の日付や時刻以外にも、曜日やタイムゾーンなどを表すための書式指定子を利用することができます。

例えば、lは曜日のフルスペル、Dは曜日の省略形、Tはタイムゾーンを表します。

リストとして主な指定文字を以下に示します。

  • l: 曜日のフルスペル(例: Monday)
  • D: 曜日の省略形(例: Mon)
  • T: タイムゾーン(例: UTC)
  • z: その年の通算日数(0から始まる)

実践的な使用例

異なるフォーマットへの変換事例

カスタムフォーマットによる出力例

ユーザーが指定するカスタムフォーマットを使って、日付や時刻を自由な形式で表示する例です。

下記のコードでは、年、月、日、時間、分、秒を日本語で示しています。

<?php
$dateTimeObject = new DateTime('2023-10-05 09:15:30');
// カスタムフォーマットの指定
$customFormat = 'Y年m月d日 H時i分s秒';
$formattedDate = date_format($dateTimeObject, $customFormat);
echo $formattedDate;
?>
2023年10月05日 09時15分30秒

複数パターンの変換例

同じDateTimeオブジェクトを利用して、複数の形式に変換する例です。

それぞれのフォーマットがどのように違う出力を生成するか確認できます。

<?php
$dateTimeObject = new DateTime('2023-10-05 18:20:45');
// 複数の出力パターン
$format1 = 'Y/m/d';
$format2 = 'd-m-Y H:i';
$format3 = 'l, F j, Y';
echo date_format($dateTimeObject, $format1) . "\n";  // 例: 2023/10/05
echo date_format($dateTimeObject, $format2) . "\n";  // 例: 05-10-2023 18:20
echo date_format($dateTimeObject, $format3) . "\n";  // 例: Thursday, October 5, 2023
?>
2023/10/05
05-10-2023 18:20
Thursday, October 5, 2023

コード例での解説

以下は、date_format関数を用いて、入力された日時を異なるフォーマットに変換する簡単な例です。

この例には、複数のフォーマット変換手順が含まれており、各変換の結果を確認できます。

<?php
// DateTimeオブジェクトの生成
$dateTimeObject = new DateTime('2023-10-05 13:05:20');
// 各フォーマットの定義
$formats = [
    'カレンダー形式' => 'Y-m-d',
    '時刻形式' => 'H:i:s',
    '日本語表記' => 'Y年m月d日 H時i分s秒'
];
// 各フォーマットごとに変換して出力
foreach ($formats as $description => $format) {
    $output = date_format($dateTimeObject, $format);
    echo $description . ": " . $output . "\n";
}
?>
カレンダー形式: 2023-10-05
時刻形式: 13:05:20
日本語表記: 2023年10月05日 13時05分20秒

注意点とエラーハンドリング

無効なフォーマット指定への対処

有効なフォーマット指定文字を利用しない場合、期待した出力が得られないことがあります。

例えば、存在しない書式指定子を使うとその文字はそのまま表示されるため、変換結果が意図しないものとなる可能性があります。

下記の例では、無効な指定文字Qがそのまま出力される動作を示しています。

<?php
$dateTimeObject = new DateTime('2023-10-05 10:10:10');
// 無効なフォーマット指定文字を含むフォーマット文字列
$invalidFormat = 'Y-m-d Q H:i:s';
$output = date_format($dateTimeObject, $invalidFormat);
echo $output;
?>
2023-10-05 Q 10:10:10

DateTimeオブジェクトのエラーチェック方法

DateTimeオブジェクト生成時やフォーマット変換時にエラーが発生する可能性もあるため、例外処理を利用することが推奨されます。

下記は例外処理を使ったエラーチェックの方法です。

<?php
try {
    // 日付文字列からDateTimeオブジェクトを生成
    $dateTimeObject = new DateTime('invalid-date');
    // フォーマット変換
    $formattedDate = date_format($dateTimeObject, 'Y-m-d H:i:s');
    echo $formattedDate;
} catch (Exception $e) {
    // エラーが発生した場合の処理
    echo "エラーが発生しました: " . $e->getMessage();
}
?>
エラーが発生しました: DateTime::__construct(): Failed to parse time string (invalid-date) at position 0 (i): The timezone could not be found in the database

まとめ

この記事では、PHPのdate_format関数の基本的な使い方やDateTimeオブジェクトの生成方法、主要なフォーマット指定文字とその違い、さらには実践的な変換例やエラーハンドリングについて詳しく学びました。

全体を通して、日付と時刻のフォーマット変換に必要な知識を簡潔に整理し、実装面の注意点にも触れております。

ぜひ、この記事で得た知見を実際のコードに取り入れて、日付操作のスキルを高めてみてください。

関連記事

Back to top button
目次へ