PHPでSQL文を書く時に日付のフォーマットを変更する方法

PHPでwebアプリを開発しているときにSQL文をPHP側で作成してデータベースへ投げる事があると思いますが、その時にdate関数を使って日付を指定してデータを検索してくる方法になります。

PHP側のdate関数の使い方と、SQLで日付をフォーマットする方法になります。

PHP | date関数の使い方

まずPHP の date関数は、現在の時刻や指定された時刻を、指定された書式に従って文字列に変換する関数です。

// 現在の日付を "Y/m/d" 形式で出力
echo date('Y/m/d');

// 現在の日時を "Y年m月d日 H時i分s秒" 形式で出力
echo date('Y年m月d日 H時i分s秒');

// 2024年3月11日 10時5分0秒を "Y-m-d H:i:s" 形式で出力
echo date('Y-m-d H:i:s', mktime(10, 5, 0, 3, 11, 2024));

書式文字列

date 関数は、書式文字列と呼ばれる特殊な文字列を使用して、出力する文字列の形式を指定することができます。

書式文字列出力例
Y年 (4桁表記)
y年 (2桁表記)
m月 (2桁表記)
n月 (先頭にゼロをつけない)
d日 (2桁表記)
H時間 (24時間表記)
h時間 (12時間表記)
i
s
t指定した月の日数
L閏年かどうか (0: 平年, 1: 閏年)
D曜日 (月, 火, 水, 木, 金, 土, 日)
M月名 (1月, 2月, 3月, …, 12月)

これらの書式文字列を組み合わせて、さまざまな形式で日付や時刻を出力することができます。

SQLでの日付の扱い方

ではSQLで日付を扱う時はどうすればいいのかというと、DATE_FORMATを使う事で日付の書式を変更することができます。

$sql = "SELECT DATE_FORMAT(CURRENT_TIMESTAMP(), '%Y-%m-%d %H:%i:%s') AS formatted_date";

CURRENT_TIMESTAMP()は、SQL で使用される関数で、現在の時刻を取得します。

例えば次のようにデータベースでcreated_dateを現在の日にちと比較する場合にDATE_FORMATしてから比較するようなことができます。

$sql .= "WHERE DATE_FORMAT(created_date, '%Y%m%d') < " . date('Ymd') . ";";
書式文字列出力例
%Y年 (4桁表記)
%y年 (2桁表記)
%m月 (2桁表記)
%n月 (先頭にゼロをつけない)
%d日 (2桁表記)
%H時間 (24時間表記)
%h時間 (12時間表記)
%i
%s
%t指定した月の日数
%L閏年かどうか (0: 平年, 1: 閏年)
%D曜日 (月, 火, 水, 木, 金, 土, 日)
%M月名 (1月, 2月, 3月, …, 12月)

DATE_FORMAT 関数は、MySQL の日付型データをさまざまな形式に変換するための強力な関数です。

DateTimeクラスを使う

DateTimeクラスは、PHPの日付と時刻を表すクラスです。

// 現在の時刻を取得
$date = new DateTime();

// 書式を指定
$date->format('Y-m-d H:i:s');

// SQL文に埋め込む
$sql = "INSERT INTO users (created_at) VALUES ('$date')";

メソッド

DateTime クラスには、さまざまなメソッドが用意されています。

  • format(): 日付と時刻を指定された書式で出力
  • modify(): 日付と時刻に加算・減算を行う
  • add(): 日付と時刻に間隔を加算
  • sub(): 日付と時刻から間隔を減算
  • diff(): 2つの日付と時刻の間隔を取得
  • getTimestamp(): UNIX タイムスタンプを取得
  • setDate(): 日付を設定
  • setTime(): 時刻を設定
// 現在の時刻を取得
$date = new DateTime();

// 日付と時刻を出力
echo $date->format('Y-m-d H:i:s');

// 1日加算
$date->add(new DateInterval('P1D'));

// 日付と時刻を出力
echo $date->format('Y-m-d H:i:s');

// 1時間減算
$date->sub(new DateInterval('PT1H'));

// 日付と時刻を出力
echo $date->format('Y-m-d H:i:s');

// 2つの日付と時刻の間隔を取得
$interval = $date->diff(new DateTime('2024-03-12 00:00:00'));

// 日数を出力
echo $interval->days;

// 時間を出力
echo $interval->h;

// 分を出力
echo $interval->i;

// 秒を出力
echo $interval->s;

DateTime クラスは、PHP で日付と時刻を扱うための強力なクラスです。

このクラスを使いこなすことで、さまざまな日付処理を行うことができます。

どの方法を使うべきか

どの方法を使うべきかは、状況によって異なります。

  • 多くの場合、DATE_FORMAT関数が最も簡単で効率的な方法です。
  • 日付型データをPHP側で処理する必要がある場合は、Date関数を使うことができます。
  • より柔軟な書式設定が必要な場合は、DateTimeクラスを使うことができます。

まとめ

PHPで日付のフォーマットを変更するには、いくつかの方法があります。

それぞれの方法のメリットとデメリットを理解して、状況に応じて適切な方法を選択してください。

コメント