PHPの現在時刻の取得と時間の比較、演算を行う方法について

時間 比較 演算 PHP
スポンサーリンク

こんにちは。てっちーです。今回は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日からの通算秒数で表記され数値で表されます。数値なので比較や演算もできますので試してみてください。

コメント

タイトルとURLをコピーしました