PHP:strtotimeの使い方:UNIXタイムスタンプへ変換(タイムゾーン情報が無いので注意!)

この関数は英語の書式での日付を含む文字列が指定されることを想定したもののため注意が必要。
baseTimestamp で与えられたその形式から Unix タイムスタンプ (1970 年 1 月 1 日 00:00:00 UTC からの経過秒数) へ変換する。 baseTimestamp が指定されていない場合は現在日時に変換してしまう。

この関数が返す Unixタイムスタンプ は、タイムゾーンの情報を含んでいない!!
日付と時刻の情報を含めて計算させるには、 より多くの機能がある DateTimeImmutable を使うべき。

DateTimeクラスは「ミュータブル」。これは日付計算のために一度変更したら基軸情報が変更後に移り変わってしまい、その後に日付計算をすると移り変わった情報から起算されるため、正常な日付が算出できなくなってしまう。

一方、DateTimeImmutableクラスは「イミュータブル」。これだと基軸情報は変更されないため、何度計算させても正常な日付が算出できる。

この関数の各パラメータでは、パラメータ内でタイムゾーンを指定しない限りはデフォルトのタイムゾーンを使います。 意図的にそうする場合は別として、パラメータごとにタイムゾーンを変えてしまったりしないように!

コードサンプル
// データベースから日付カラムを取得して年月日を「/」で区切りたいが、DBでは「-」で連結されておりそのままではできない。よって、いったんUNIXタイムスタンプ化し、それをdate関数を使って達成させたもの。
$date_sv = strtotime($ary['date']);
echo date('Y/m/d', $date_sv);
目次
閉じる