umesoのブログ

答えがでるまで 考えて 考えて 考える

PHPの日付関数 (date(), strtotime()) を組み合わせて、よくある方法で日付を表示する

DBにunixtimeを保存している場合などに、date()strtotime()を使って日付を比較、表示するのによく使う方法です。

指定時間のunixtimeを取得する

<?php
date_default_timezone_set('Asia/Tokyo');

// ▼ 指定した日付のunixtimeを取得
echo strtotime("2020-04-01 00:00:00"); // 1585666800
echo "\n";

// ▼ 指定日付(年月)のunixtimeを取得
$date_YM = '2020-04-01';
// strtotime()は1ヶ月前など相対的に取得できる。
echo strtotime($date_YM . "-1 month"); // 1582988400
echo "\n";

// ▼ date()にて日付文字列に変換してから、strtotime()にて相対的にunixtimeを取得する。
$unixtime = 1585666800; // 2020-04-01 00:00:00
// 1日後のunixtimeを取得
echo strtotime(date('Y-m-d H:i:s', $unixtime) . " +1 day"); // 1585753200
echo "\n";

// 先月のunixtimeを取得
echo strtotime(date('Y-m-d H:i:s', $unixtime) . " -1 month"); // 1582988400
echo "\n";

指定時間の日付を取得する

<?php
date_default_timezone_set('Asia/Tokyo');

// ▼ unixtimeを日付文字列に変換する。
$now_date = 1585666800;
echo date('Y-m-d H:i:s', $now_date); // 2020-04-01 00:00:00
echo "\n";

// ▼ 日付文字列の1ヶ月前の日付を取得する。
$now_date = '2020-04-01 00:00:00';
// 1ヶ月前の日付文字列を取得する
echo date('Y-m-d', strtotime($now_date.' -1 month'));  // 2020-03-01
echo "\n";

// ▼ unixtimeの1ヶ月前の日付文字列を取得する
$current_time = 1585666800;
// 1ヶ月前の日付文字列を取得する
echo date('Y-m-d', strtotime(date('Y-m-d', $current_time). ' -1 month')); // 2020-03-01
echo "\n";

おわり

毎回忘れるので、ここにまとめました。
strtotime()には月末を取得するときに有名な罠があるので、気をつけてください。

参考

tototoshi.hatenablog.com