PHP変数「11:00 AM」をMySQLの時間形式に変換する方法
PHPの「11:00 AM」をMySQLの時間形式に変換する方法
MySQLのTIME型やDATETIME型は、時刻を24時間表記の「HH:MM:SS」形式で管理します。そのため、「11:00 AM」のようにAM/PMを含む文字列をデータベースに保存する場合は、事前に形式を変換しておく必要があります。本記事では、PHP標準のDateTimeクラスを使った変換方法を、サンプルコードと実行結果付きで解説します。
変換の基本の流れ
DateTime::createFromFormat()… 入力文字列をDateTimeオブジェクトとして解析するformat()… 解析結果を「H:i:s」(24時間表記)の文字列に整形する
サンプルコード
$phpTime = '11:00 AM';
echo('PHP側の時刻フォーマット = ');
echo($phpTime);
// 12時間表記の文字列をDateTimeオブジェクトに変換
$timeFormat = DateTime::createFromFormat('h:i A', $phpTime);
// MySQL用の時間形式(HH:MM:SS)に整形
$MySQLTimeFormat = $timeFormat->format('H:i:s');
echo('<br />');
echo('MySQL側の時刻フォーマット = ');
echo($MySQLTimeFormat);
実行結果
PHP側の時刻フォーマット = 11:00 AM MySQL側の時刻フォーマット = 11:00:00
このように、「11:00 AM」がMySQLでそのまま利用できる「11:00:00」に変換されました。変換後の値は、TIME型のカラムにそのままINSERTすることができます。
使われている書式指定子の意味
| 指定子 | 意味 | 例 |
|---|---|---|
h | 12時間表記の時(01〜12) | 11 |
H | 24時間表記の時(00〜23) | 23 |
i | 分(00〜59) | 00 |
s | 秒(00〜59) | 00 |
A | 午前・午後(AM/PM) | AM |
実装時のポイント
AM/PM付きの入力文字列を解析する場合は、12時間表記に対応したh:i Aを指定するのが確実です。一方、MySQLへ渡す出力には24時間表記のH:i:sを使用します。入力と出力で書式指定子を使い分けることが、正しく変換するためのポイントです。
また、実際のアプリケーションに組み込む際は、SQLインジェクション対策として、プレースホルダを使ったプリペアドステートメントで値をバインドすることをおすすめします。
-
MySQLでNULLを0に変換する方法|IFNULLとCOALESCEの使い方を実例で解説
MySQLでNULLを0に変換する方法 MySQLでは、テーブル内のNULL値をそのまま表示すると、集計やアプリケーション側の処理で扱いにくいケースがあります。そんなときは、IFNULL()関数またはCOALESCE()関数を使えば、NULLを簡単に0へ変換できます。 基本構文 IFNULL関数を使う場合の構文は以下のとおりです。第1引数がNULLの場合に、第2引数(ここでは0)が返されます。 SELECT IFNULL(yourColumnName, 0) AS anyAliasName FROM yourTableName; COALESCE関数を使う場合の構文は次のとおりです。 SEL
-
PHPとMySQLで時刻を扱う方法|strtotime()とDATE_FORMAT()による形式変換
PHPで時刻形式を変換する方法 PHPで時刻データを扱う際、strtotime()関数を使えば、「8:55 PM」のような人間が読みやすい12時間制の表記を、データベースで扱いやすい24時間制(HH:MM:SS)へ簡単に変換できます。 PHPコード例 $timeValue = 8:55 PM; $changeTimeFormat = date(H:i:s, strtotime($timeValue)); echo(24時間制への変換結果=); echo($changeTimeFormat); このコードでは、まずstrtotime()が文字列「8:55 PM」をUNIXタイムスタンプに変換