日時の取得はプログラミングのなかでも基礎中の基礎とも言える関数処理です。
特にPHPにおいてはウェブページ上で動的に処理が行なわれることから、日時の算出などがしやすいように開発されており、当日の日付を割り出すことはもちろんとして、さらには1ヶ月前の日付や1年前の日付であっても関数ひとつで算出できるように開発された優れたプログラミング言語といえます。
PHPerの方やPHP初心者の方でも、これから紹介するstrtotime関数での日時の入れ方をブックマークしておけば、ウェブページの管理を楽にできることでしょう。
参照:仕事で使える超実践的PHP勉強法を紹介した記事はこちら
日時の指定には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); } |
参照:仕事で使える超実践的PHP勉強法を紹介した記事はこちら
フリーランスになるために必要な知識やスキルアップの方法等、様々なお役立ち情報を発信していきます。
(リモートワーク案件に強いフリーランスエージェント「クラウドワークス テック」を運営)