こんにちは。てっちーです。今回はPHPの時刻の扱い方について紹介します。現在時刻の取得や日付や時間の日時についての比較、演算について説明したいと思います。
現在の日時を取得する
方法としては次の2つの方法があります。1つは日時の文字列を取得する方法、もう1つは比較もできる日時を表す数値(タイムスタンプ)を取得する方法です。表示するときは文字列、比較演算を行いたいときは数値(タイムスタンプ)を取得するのが便利です。
タイムスタンプとはUNIX時間で表されたもので、1970年1月1日 午前0時0分0秒からの経過秒数で表されたものです。とりあえず、単位が秒数の数値だということは覚えておきましょう。
時刻の文字列取得 : string date(表示形式,[タイムスタンプ])
date()関数を使うと、タイムスタンプで指定した日時(年/月/日 時:分:秒)の文字列を取得できます。タイムスタンプは省略すると現在時刻を返すので、下記を実行すると”年/月/日 時:分:秒”のフォーマットで現在時刻の文字列を取得できます。
$nowtime = date("Y/m/d H:i:s"); echo $nowtime;
表示結果は下記です。使用したフォーマットの意味はは、Y:年 m:月 d:日 H:時間(24時間表記) i:分 s:秒 です。その他のフォーマットについては「PHPで日付や時刻の文字列へ変換と文字列から日付や時刻への変更」の記事を参考にしてみてください。
2018/02/12 10:59:18
もし、時刻が全く違ってるじゃねーかという場合は、タイムゾーンが異なっている場合があります。こちらの「PHPの時刻がずれている!そんなときのタイムゾーンの指定の方法」の記事を参考にタイムゾーンを変えてみてください。数秒程度ずれはシステムの時間のずれの可能性が高いです。PCの時刻設定やサーバーの時間を見直してみてください。
int time(void):現在時刻を取得
現在の時刻を[1970 年 1 月 1 日 ] からの通算秒(タイムスタンプ)として返します。取得した数値は上記のdate()関数で任意の文字列へ変換できます。
$nowstamp = time(); $nowtime2 = date("Y/m/d H:i:s",$nowstamp); echo $nowstamp; echo $nowtime2;
取得した変数は次の通りです。
1518402266 2018/02/12 11:24:26
“1518402266”という、タイムスタンプを取得して、それを日時の文字列への変換ができています。
日付の演算
日付の演算
日付の演算はタイムスタンプに対して行います。タイムスタンプは秒数の単位なので、数値を足せば日時を増減できます。先ほど使った、”1518402266”(2018/02/12 11:24:26)で演算してみます。ここでstrtotime()関数を使っていますが、これは文字列からタイムスタンプへ変換です。詳しい使い方については「PHPで日付や時刻の文字列へ変換と文字列から日付や時刻への変更」の記事も参考にしてください。
// "2018/01/01 00:00:00"を代入 $time1 = strtotime("2018/01/01"); // $strtime1 = date("Y/m/d H:i:s",$time1); // 文字列をタイムスタンプへ変換 // "2018/01/01 00:00:10" (10秒追加) $time2 = $time1+10; // "2018/01/01 00:10:00" (10分追加) $time3 = $time1+10*60; // "2018/01/01 10:00:00" (10時間追加) $time4 = $time1+10*60*60; // "2018/01/11 00:00:00" (10日追加) $time5 = $time1+10*24*60*60;
日付の比較
タイムスタンプはより新しいと大きい数値になります。それを利用して、普通にタイムスタンプの大小比較で日付比較ができます。
// "2018/01/01 00:00:00"を代入 $time1 = strtotime("2018/01/01"); // if($time1<time()){ // 現在より$time1が小さい=>過去 echo date("Y/m/d H:i:s",$time1)."は過去です。"; } else { // 現在より$time1が大きい=>未来 echo date("Y/m/d H:i:s",$time1)."は未来です。"; }
実行すると下記のように表示され、うまく判定できています。
ちなみに秒数まで比較するので、その点はご注意ください。
2018/01/01 00:00:00は過去です。
まとめ
PHPの日時は1970年1月1日からの通算秒数で表記され数値で表されます。数値なので比較や演算もできますので試してみてください。
コメント