サンプル付きで解説!1日足す、減らすなどのPHPの日時の計算・演算方法

PHP

日時の取得はプログラミングのなかでも基礎中の基礎とも言える関数処理です。

特にPHPにおいてはウェブページ上で動的に処理が行なわれることから、日時の算出などがしやすいように開発されており、当日の日付を割り出すことはもちろんとして、さらには1ヶ月前の日付や1年前の日付であっても関数ひとつで算出できるように開発された優れたプログラミング言語といえます。

PHPerの方やPHP初心者の方でも、これから紹介するstrtotime関数での日時の入れ方をブックマークしておけば、ウェブページの管理を楽にできることでしょう。

目次

 ・日時の指定にはstrtotime関数が便利

 ・strtotime関数とは?

 ・strtotime関数で日時を加算・減算する

 ・日付の差を求める

 

日時の指定にはstrtotime関数が便利

例えば、ホームページ上で今日の日付を出したい場合。これは簡単ですよね。

echo date(“Ymd”); // 年月日

上記のようにPHPのdate関数を使用することで本日の日付を表記することが可能です。

では、前日の日付といわれたらどうですか?または1年前の日付であったらどうでしょう?

う~んと少し悩む方もいるのではないでしょうか?
今悩んだ方にはこれから紹介するstrtotime関数をぜひ覚えておいてください。

実は、PHPでの日時の算出は驚くほど簡単にできるんです。

strtotime関数とは?

PHPにて使用できる日時取得に使うためのUNIXタイムスタンプを求める関数処理です。

マニュアル上では「英文形式の日時をUNIXタイムスタンプ※1に変換する」という解説がありますが、少し分かりづらいですね。

簡単に説明すると「英語で指定した日時の”値”が割り出せる関数」ということです。

例えば、昨日の日付であれば「strtotime( “-1 day” );」、1週間前であれば「strtotime( “-1 week” );」、1年前であれば「strtotime( “-1 year” );」といったように、英語で年月日を指定するだけで難しい計算処理をしなくてもプログラミングで勝手に年月日のUNIXタイムスタンプを算出してくれるんです。

 

strtotimeではUNIXタイムスタンプしか求められないため、実際に日時を表示する際には以下のようにdate関数と併用します。

 

echo date( “Y-m-d ” , strtotime( “yesterday” ) );昨日の日付を表示する

 

どうですか?とても簡単ではないですか?

上述したとおり、1年前であっても”-1 year”のように変換するだけで「UNIXタイムスタンプ」を意識することなく、1年前の日付が簡単に割り出すことができます。

さらに驚きなのが「strtotime( “yesterday” );」と指定すれば前日の日付が、「strtotime( “last year” );」と指定すれば1年前の今日の日付が算出できます。

このようにstrtotimeは「英文表記で指定した日時が割り出せる関数」なんです。

覚えやすく使い勝手もいい関数であるため、strtotime関数について知っておくことで、ウェブページ作成の幅も広がることでしょう。

※1 UNIXタイムスタンプとはコンピュータが実際に日時計算を行なうときに使用する「数値」のことです。例えば「2016年11月11日 1時26分33秒」であれば、UNIXタイムスタンプは「1478827593」となり、この数値がコンピュータで処理されています。

date関数ではこのUNIXタイムスタンプの数値を用いて、私達に分かりやすい日付表記に変換した値を返しています。

strtotime関数で日時を加算・減算する

では、実際にstrtotimeで指定できるフォーマットを学びましょう。

先述したとおり、strtotime関数で求められるのはあくまでUNIXタイムスタンプであるため、日時として使用する際にはdate関数と併用しましょう。

また、表示したいのは年月日の情報だけであってもUNIXタイムスタンプでは年月日と時分秒の情報を全て持っているため、設定される時刻も合わせて意識しておきましょう。

当日

strtotime( “today” );//当日0時00分00秒のUNIXタイムスタンプ

 

※以下、0時00分00秒は0時ジャストと表記する

前日、翌日などの日単位で指定

strtotime( “+1 day” );//翌日の現在時刻

strtotime( “+365 day” );//365日後(翌年)の現在時刻

※「+」は省略可能

strtotime( “-1 day” );//前日の現在時刻

strtotime( “-365 day” );//365日前(前年)の現在時刻

【英文形式での日付指定】

strtotime( “tomorrow” );//翌日の0時ジャスト

strtotime( “yesterday” );//前日の0時ジャスト

 

先週、翌週などの週単位で指定

strtotime( “+1 week” );//1週間後の現在時刻

strtotime( “+10 week” );//10週後の現在時刻

strtotime( “-1 week” );//1週間前の現在時刻

strtotime( “-10 week” );//10週前の現在時刻

 

月で指定

strtotime( “+1 month” );//来月1日0時ジャスト

strtotime( “+2 month” );//再来月1日0時ジャスト

strtotime( “-1 month” );//先月1日0時ジャスト

strtotime( “-2 month” );//2カ月前の1日0時ジャスト

strtotime( “2016-07” );//2016年7月1日0時ジャスト

【英文形式での月指定】

strtotime( “january” );//当日が10日であれば、今年1月10日0時ジャスト

 

年で指定

strtotime( “+1 year” );//1年後の現在日時

strtotime( “-1 year” );//1年前の現在日時

【英文形式での年指定】

strtotime( “next year” );// 1年後の現在日時

strtotime( “last year” );// 1年前の現在日時

 

月初・月末

strtotime( “first day of 2016-09” );//2016年9月1日0時ジャスト

strtotime( “last day of 2016-09” );//2016年9月31日の0時ジャスト

strtotime( “first day of next month” );//来月1日0時ジャスト

曜日

strtotime( “+1 sunday” );//次の日曜0時ジャスト

strtotime( “-1 sunday” );//前の日曜0時ジャスト

【英文形式での曜日指定】

strtotime( “next sunday” );//次の日曜0時ジャスト

strtotime( “last sunday” );//前の日曜の0時ジャスト

時分秒

strtotime( “+1 sec” );//1秒後

strtotime( “-1 sec” );//1秒前

strtotime( “+1 min” );//1分後

strtotime( “-1 min” );//1分前

strtotime( “+1 hour” );//1時間後

strtotime( “-1 hour” );//1時間前

正午・0時ジャスト

strtotime( “noon” );//今日の12時00分00秒

strtotime( “midnight” );//今日の0時ジャスト

日時を組み合わせる書き方

strtotime( “+1 month +1 day +1 hour +1 minute” );// 現在日時から1ヶ月、1日、1時間、1分後

参照:http://kihon-no-ki.com/PHP-use-date-and-strtotime

日付の差を求める

これだけ便利なPHPでも用意されていない関数もあります。

それは日時の「差」を求める関数です。

そのため、以下のようなスクリプトを自分で作ってやる必要があります。

function diffTime($start,$end) {

$startSec = strtotime($start);

$endSec   = strtotime($end);

$diff = $endSec – $startSec;

return gmdate(‘h:i:s’,$diff);

}

参照:http://qiita.com/super2baba/items/f4cdc83621de19d83082

まとめ

いかがでしょうか?PHPは高級言語に分類されるため、本来は数値のみで構築されるプログラミングをかなり自然な言葉に近い形で使えるようにしてあります。

そのため、意外と知られていないテクニックもたくさん隠されているんですよ。今回紹介したテクニックにも意外と知らなかったものもあったではないでしょうか?

ぜひこの記事をブックマークして、活用してくださいね。

>>リモートワーク案件も充実!PHPのフリーランス求人案件をクラウドテックで探す

関連記事