こんにちは!エンジニアのノムラです。
PHPではUnixタイムスタンプを取得したり、指定した日時のUnixタイムスタンプを取得できる関数strtotime関数があります。
この記事では
- Unixタイムスタンプとは?
- strtotime関数でUnixタイムスタンプの取得
- 日時を取得する方法
といった基本的な内容から、
- 指定日時を取得する方法
- 日付を指定してファイルを削除する方法
- 指定日の曜日を取得する方法
などの応用的な内容に関しても解説していきます。
今回はそんなUnixタイムスタンプと日時の取得方法について詳しく解説します!
Unixタイムスタンプとは
Unixタイムスタンプとは、協定世界時(UTC)で1970年1月1日(午前0時0分0秒)の時刻からの経過秒数を表すものです。
多くのオペレーティングシステムでは、この表現方法が用いられてます。
また、規模の大きさにかかわらずシステムは時刻で管理しているものが多く、基本的にタイムスタンプについては理解しておく必要があると言えるでしょう。
strtotime関数でUnixタイムスタンプの取得
strtotime関数では、現在日時や指定した日時のUnixタイムスタンプを取得することができます。
書き方:
int strtotime ( string $日付/時刻を表す文字列 [, int $基準日 = 現在日時 ] )
引数:
第一引数には日付や時刻を表す文字列を指定します。
有効な書式については 以下を参照してください。
http://php.net/manual/ja/datetime.formats.php
第二引数には基準となるUnixタイムスタンプを指定します。
返り値:
Unixタイムスタンプを返します。
現在の日時を取得するサンプルです。現在の日時を指定するには、引数に‘now’を指定します。
サンプルプログラム1:
<?php // 現在時刻のUnixタイムスタンプを取得 $time = strtotime('now'); // 表示 echo $time; ?>
実行結果1:
1500957891
実行結果のように、現在の日時からUnixタイムスタンプが取得できることがわかりますね!
指定した日時のUnixタイムスタンプを取得するサンプルです。
サンプルプログラム2:
<?php // 指定日時のUnixタイムスタンプを取得 $time = strtotime('2017-8-1 12:30:30'); // 表示 echo $time; ?>
実行結果2:
1501590630
このように指定した時刻のタイムスタンプを取得することもできますので、時刻同士を比較するときにも活用できます。
たとえば、指定した日時より古いデータを削除するときや、タスクやTO-DOアプリなどの時刻指定などでタイムスタンプによる判定で処理を行うこともできます。
日時を取得する
取得したUnixタイムスタンプから、日時を取得してみましょう。
日時を取得するには、date関数を使用します。
date関数の使い方
date関数は以下のように記述します。
書き方:
string date ( string $フォーマット文字列 [, int $Unixタイムスタンプ = 現在日時 ] )
引数:
第一引数には、第二引数のUnixタイムスタンプをフォーマットするフォーマット文字列を指定します。
第二引数にはフォーマットするUnixタイムスタンプを指定します。指定のない場合は、現在日時がフォーマットされます。
返り値:
フォーマットされた文字列を返します。
指定した日付フォーマットで取得する
Unixタイムスタンプを指定した日付フォーマットで取得するサンプルです。
サンプルプログラム:
<?php $date = '2017-08-01 00:00:00'; echo date('Y年m月d日', strtotime($date)); ?>
実行結果:
2017年08月01日
date関数の第一引数にフォーマット文字列を指定し、第二引数にstrtotime関数で取得したUnixタイムスタンプを指定します。
このように指定した日付フォーマットに変換する方法や、date関数でフォーマットを指定する方法については、以下の記事で詳しく解説しています!
strtotime関数での日時を指定した処理
strtotime関数は、「絶対日時」と「相対日時」で日時を指定してUnixタイムスタンプを取得することができます。
指定日時を取得する
まず絶対日時を取得するサンプルをみていきましょう。
絶対日時とは、現在日時や指定した時刻など定まった絶対的な日時のことです。
サンプルプログラム1:
<?php //指定した日時のタイムスタンプ $time = strtotime('2017-8-1 10:30:30'); echo $time; ?>
実行結果1:
1501583430
次に、相対日時を取得するサンプルです。
相対日時は、現在日時から3時間後の日時や、現在日時から2日前の日時などの相対的な日時のことをいいます。
サンプルプログラム2:
<?php //+10秒の現在時刻のタイムスタンプ $time = strtotime('+10 second'); echo $time; ?>
実行結果2:
1500961292
strtotime関数を使用して絶対日時や相対日時を取得する方法や、date関数の基本的な使い方については、以下の記事で詳しく解説しています!
PHPの時間を扱う関数をまとめた記事もあるので、strtotime関数と比較してみてください!
日付を指定してファイルを削除する
strtotime関数を使用すれば、指定した日時のUnixタイムスタンプを取得することができます。
そのため、更新日時が一週間前のファイルを指定して削除することも可能です。
一週間のタイムスタンプを取得するには、strtotime関数で以下のように指定します。
$day = date('Y-m-d',strtotime('- 7 day'));
日付を指定してファイルを削除する方法の詳細については、以下の記事で詳しく解説していますので、ぜひ参考にしてください!
指定日の曜日を取得する
strtotime関数を使用すれば、指定した日時から曜日を取得することができます。
曜日を取得するには、date関数の第一引数に曜日を取得する’w’を指定し、第二引数にstrtotime関数で日付を指定します。
サンプルプログラム:
<?php //指定日の曜日を取得 $date = date('w', strtotime('20170801')); //配列を使用し、要素順に(日:0~土:6)を設定する $week = [ '日', //0 '月', //1 '火', //2 '水', //3 '木', //4 '金', //5 '土', //6 ]; //日本語で曜日を出力 echo $week[$date] . '曜日'; ?>
実行結果:
火曜日
以下の記事ではstrtotime関数の他にmktime関数で曜日を取得する方法や、date関数でさまざまな曜日を取得する方法について解説していますので、ぜひ参考にしてみてください!
strtotime関数はオススメできない!?
strtotime関数は現在や指定した日時のUnixタイムスタンプを取得するときに便利ですが、「2038年問題」があるため、オススメできない場合もあります。
2038年問題とは「2038年1月19日3時14分7秒」をすぎるとコンピュータが誤動作を起こすと言われている問題です。
そんな2038年問題の詳細や日付を比較する方法については、以下の記事で詳しく解説しています!
まとめ
ここでは、Unixタイムスタンプと日時の取得方法について、
・strtotime関数でUnixタイムスタンプを取得する方法
・日時を取得する方法
・指定日時を取得する方法
・日付を指定してファイルを削除する方法
・指定日の曜日を取得する方法
など、strtotime関数の様々な使い方について解説しました。
実際のシステムでもUnixタイムスタンプはさまざまな処理でよく使われますので、ぜひ覚えておきましょう!
もし、Unixタイムスタンプと日時の取得方法を忘れてしまったら、この記事を思い出してくださいね!