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で日付のフォーマットを変更するには、いくつかの方法があります。
それぞれの方法のメリットとデメリットを理解して、状況に応じて適切な方法を選択してください。
コメント