BookmarkLINEPHPを用いてWEBアプリケーションを構築していると、日時を扱う事も多いと思います。PHPで日時を操作する場合は、DateTimeクラス、もしくは関数であるdate/time/strftime/mktime/strtotimeを使います。今回はPHPでデフォルトで利用できる(外部ライブラリを必要としない)オブジェクトや関数を用いて日時操作を行っていきます。今回の開発環境は以下の通りです。7.2PHP7を使っていますが、今回扱う内容は最低でもPHP5.2以上であれば進めていけます。マイクロ秒の事を言います。PHPの関数やクラスを用いて日時を操作する場合、日時を取得する先はスクリプトを実行しているWEBサーバからになります。よって、アプリケーションを動作させるサーバのロケール設定をまず確認し、適切な日時を返す事を確認してください。DateTimeクラスDateTimeクラスでは、日時をオブジェクト指向で扱う事が出来ます。PHP5.2から利用可能です。現在日時を取得するには、DateTimeクラスのインスタンス化の際に引数には日時を渡さない事で暗黙的に現在日時として設定されます。メソッドを用いて、引数に任意のフォーマットを渡します。2018/08/18任意の日時を扱うには、DateTimeクラスのインスタンス化の際に引数に日時を渡します。その後、フォーマットを指定して出力します。setDate()コンストラクタに渡さない場合でも、setDate()メソッドを用いる事で年月日をセットする事が出来ます。メソッドにセットできるのは年月日だけです。)setTime()時刻をセットする場合は、setTime()メソッドを使います。07:03:12setTime()メソッドでは、引数に時・分・秒を渡しますが、必須なのは時間と分です。秒はデフォルトで0が渡されます。)もちろん、これらを組み合わせても使う事が出来ます。07:03:12別々でもセットできますし、チェーンさせる事も可能です。$second);createFromFormat()渡す日時のフォーマットを指定する事もできます。createFromFormat()メソッドを用います。引数には渡す日時のフォーマット、そして第二引数に日時を渡します。createFromFormat()メソッドは静的メソッドで使うのがポイントです。)定義済み書式で現在日時を出力DateTimeクラスには、既に定義済みの日時フォーマットが定数で容易されており、これらを使えば複雑に英字を取り回さなくても良くなります。2018-08-18T07:23:37+09:00タイムゾーンタイムゾーン情報の取得と出力は以下にして行います。UTCgetTimezone()メソッドでタイムゾーン情報の取得を行います。getName()メソッドで、取得したタイムゾーンからタイムゾーン名を出力します。ちなみにタイムゾーン情報は、他にtimezone_typeを保有します。)タイムゾーンの設定は、コンストラクタに渡すパターンと、setTimezone()メソッドを用いるパターンで設定できます。DateTimeZone('Asia/Tokyo'));setTimezone()メソッドでは、DateTimeZoneクラスのインスタンス化と共にセットするタイムゾーンを渡します。DateTimeZone('Europe/Rome'));コントラスタに渡す場合は、第一引数に日時、第二引数にDateTimeZoneインスタンスを渡します。日時操作/modify()日時操作、いわゆる日時を進めたり戻したりするには、modify()メソッドを用います。1年+2ヵ月+3日+4時間進めるわりと使うものだけ抜粋しましたが、書式は他にもたくさんあります。これ以上はPHPマニュアルを参照してください。相対的な書式http://php.net/manual/ja/datetime.formats.relative.php日時の差分/diff()日時の差分を取るには、diff()メソッドを用います。以降でDateTimeオブジェクトを比較演算子で比較できるようになっています。false日時の比較は良く使いますが、簡単に比較が行えるので便利です。DateTimeImmutableクラスDateTimeImmutableクラスは、イミュータブル(不変的)な日時操作を行う為のオブジェクトです。DateTimeImmutableクラスの機能はDateTimeクラスとほぼ同じですが、自身は変更せずに新しいオブジェクトを返します。元々の日時データは変更せずに、変更した新しいオブジェクトを返却します。DateTimeクラスは参照型なので、現在日時やセットした日時を変更すれば、保持している日時情報も変更されますが、こちらのクラスは元々の日時情報は変更されません。1つの日時情報を基にして、色々と日時操作を行う場合などにはこちらのクラスの方が使えます。2019-01-01date()date関数はローカルの日付・時刻を書式化します。使用できるPHPのバージョンは4/5/7です。)第一引数には日時フォーマット、第二引数にはオプションでタイムスタンプを渡します。タイムスタンプを渡さない場合はデフォルトで現在日時を対象として処理が行われます。08:21:48time()time関数はシンプルに現在のUnixタイムスタンプを返します。通算秒として返します。使用できるPHPのバージョンは4/5/7です。1534634572date関数と組み合わせても使えます。08:21:48time()で現在日時のタイムスタンプが返りますが、以下のようにする事で、日時加算を行う事も出来ます。1年先strftime()strftime関数は、ロケールの設定に基づいてローカルな日付・時間をフォーマットします。使用できるPHPのバージョンは4/5/7です。)第一引数には日時フォーマット、第二引数にはオプションでタイムスタンプを渡します。タイムスタンプを渡さない場合はデフォルトで現在日時を対象として処理が行われます。08:24:02strftime関数はdate関数と良く似ています。両者の違いは、日時フォーマットの書式が違う事と、こちらはロケール設定に基づいた処理を行うので、setlocale()でセットしたロケールによって月だったり曜日だったりが変化します。(例えば英語と日本語とか)mktime()mktime関数は、日付をUnixタイムスタンプとして取得します。使用できるPHPのバージョンは4/5/7です。渡しますが、右から順に省略する事が可能です。引数を全て渡さない場合は、現在日時のタイムスタンプを返します。08:22:52date関数と組み合わせて任意の日時を出力する事もできます。strtotime()strtotime関数は、英文形式の日付をUnixタイムスタンプに変換します。使用できるPHPのバージョンは4/5/7です。time())引数に英字文字列での相対的な日時指定と、タイムスタンプを渡しますが、第二引数は必須ではありません。引数のみを指定した場合は、現在日時のタイムスタンプを基準としてその結果を返します。1535239728strtotime関数もdate関数と組み合わせて任意の日時を出力する事ができます。以下の例は、現在日時から1年と1か月後の日時をDATETIME形式で出力しています。14:31:46まとめこのように、PHPで日時操作を行う為の関数やクラスは複数ありますが、1つ1つ丁寧に見ていくとそれら個々の役割や使いどころもよくわかってきます。日時操作はPHPプログラミングの基本なので、整理してきちんと理解しておくといざ使う時になって迷わなくてよいですね。イベントレポート2019.12.8MySQL8.0.16で追加されたCHECK制約を試してみる。2019.12.2LaravelのContracts(契約)とは。SESを使ってAPIメール送信を行う(Mailableクラス&SimpleEmailService)2019.12.3MySQL8.0.16で追加されたCHECK制約を試してみる。RitoLaboこのサイトについて利用規約プライバシーポリシ。