PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPで日付形式を変換する方法|strtotime・date関数の使い方を解説

PHPで日付形式を変換するには、strtotime関数とdate関数を組み合わせるのが基本のアプローチです。ここでは、実際のサンプルコードをもとに、その仕組みと注意点をわかりやすく解説します。

サンプルコード

<?php
    function string_convert($my_date){
        $sec = strtotime($my_date);
        $my_date = date("Y-m-d H:i", $sec);
        $my_date = $my_date . ":00";
        echo $my_date;
    }
    $my_date = "23/11/2020 11:59 PM";
    string_convert($my_date);
?>

出力結果

1970-01-01 00:00:00

コードの解説

このプログラムでは、日付文字列を引数として受け取る「string_convert」という関数を定義しています。関数内では、まずstrtotime関数を使って、英語表記の日時テキストをUNIXタイムスタンプ(1970年1月1日00:00:00 UTCからの経過秒数)へ変換しています。

$sec = strtotime($my_date);
$my_date = date("Y-m-d H:i", $sec);
$my_date = $my_date . ":00";

続いて、date関数で「Y-m-d H:i」(年-月-日 時:分)の形式に整形し、末尾に「:00」を連結することで、秒まで含んだ「年-月-日 時:分:秒」の形に整えています。最後にechoで結果を画面に出力します。

echo $my_date;

関数の外側では、変換対象となる日時文字列「23/11/2020 11:59 PM」を定義し、それを引数として関数を呼び出すことで、処理結果が表示される仕組みです。

注意点:出力が「1970-01-01」になる理由

上記の出力が「1970-01-01 00:00:00」になっているのは、strtotimeが「DD/MM/YYYY」形式(日/月/年)の日付を正しく解析できず、変換に失敗しているためです。変換に失敗すると戻り値はfalseとなり、結果としてUNIXエポックである1970年1月1日が表示されてしまいます。

このような形式を確実に変換したい場合は、フォーマットを明示的に指定できるDateTime::createFromFormatを使うのがおすすめです。

<?php
    $dt = DateTime::createFromFormat('d/m/Y h:i A', '23/11/2020 11:59 PM');
    echo $dt->format('Y-m-d H:i:s');
?>

出力結果

2020-11-23 23:59:00

このように、入力される日付文字列の形式があらかじめ分かっている場合はDateTime::createFromFormat、標準的な英語表記の日時であればstrtotimedateの組み合わせというように、用途に応じて使い分けることで、意図どおりの日付変換が実現できます。

  1. Windows 10で時刻の表示形式を変更する方法【12時間/24時間表示の切り替え】

    時間の確認は「午前/午後」の12時間表記がお好みですか?それとも24時間表記派でしょうか?「18:00」という数字を見たとき、頭の中で自動的に夜8時へ変換してしまう人もいれば、そのまま午後6時だと即座に理解できる人もいます。どちらのスタイルであっても、Windowsデスクトップの右下に表示される時計を一目見ただけで、正確な時刻を把握できることが大切です。そのためには、自分に合った時刻形式で表示する必要があります。そこで本記事では、Windows 10の時計の時刻形式を、自分好みの表示に変更する方法をわかりやすく解説します。少し意外に思われるかもしれませんが、Windows 10では時計をクリッ

  2. PHP・MySQLで日付形式をdd/mm/yyyyに変更する方法

    PHPやMySQLでは、日付の表示形式を自由に変更できます。本記事では、日付を「dd/mm/yyyy(日/月/年)」形式に変換する方法を、PHPとMySQLそれぞれのケースについて解説します。PHPで日付形式を変更する方法PHPでは、date()関数を使って日付形式を簡単に変更できます。基本構文は以下の通りです。date(d/m/Y, 日時の変数);また、文字列を日付として扱う場合は、strtotime()関数を使用します。この関数は、日付を表す文字列をUnixタイムスタンプに変換してくれるため、date()関数と組み合わせて使うのが一般的です。以下は、日時を「dd/mm/yyyy」形式に整形