PHPで日付の比較
フォーマットが異なる日付の比較方法
過去/未来の判定
PHP
// 比較する日付同士のフォーマットが同じ
if ($date < '2025-04-02') {
echo "2025-04-02より過去。";
} elseif ($date == '2025-04-02') {
echo "2025-04-02と一致。";
} else {
echo "2025-04-02より未来。";
}
// 比較する日付同士のフォーマットが異なる
// Y-m-dとY/m/dを比較する場合
// strtotime('2025/04/02'); は 1743519600
// strtotime('2025-04-02'); は 1743519600
if (strtotime($date) < strtotime('2025-04-02')) {
echo "2025-04-02より過去。";
} elseif (strtotime($date) == strtotime('2025-04-02')) {
echo "2025-04-02と一致。";
} else {
echo "2025-04-02より未来。";
}
// ファイルのタイムスタンプもstrtotimeを使って比較
// 更新日時が2025年4月1日、20:30:00であれば、 filemtimeは1743507000
if (filemtime('foo.txt') < strtotime('2025-04-02')) {
echo "2025-04-02より過去。";
} elseif (filemtime('foo.txt') == strtotime('2025-04-02')) {
echo "2025-04-02と一致。";
} else {
echo "2025-04-02より未来。";
}
// 時間が含まれる場合 秒がセットされていない場合は0秒扱い
// strtotime('2025-04-02 16:18'); は 1743578280
// strtotime('2025-04-02 16:18:00'); は 1743578280
if (strtotime($date) < strtotime('2025-04-02 16:18')) {
echo "2025-04-02 16:18より過去。";
}
// 分がセットされていない場合はstrtotimeでは結果が返ってこない
日付の差
PHP
// 日数のみ
// 2025-04-01と2025-04-02の差は4019日
$diff = strtotime($date) - strtotime('2025-04-02');
echo abs($diff / (60 * 60 * 24)) . '日';
// 日数と時間
// 2025-04-01 20:30:40と2025-04-02 16:18:14の差は0日19時間47分34秒
$diff = strtotime($date) - strtotime('2025-04-02 16:18:14');
// 日
$days = floor(abs($diff / (60 * 60 * 24)));
// 余りを求める(=時間、分、秒)
$daysRemaind = $diff % (60 * 60 * 24);
$hours = 0;
if ($daysRemaind > 0) {
// 時間
$hours = floor(abs($daysRemaind / (60 * 60)));
// 余りを求める(=分、秒)
$hoursRemaind = $daysRemaind % (60 * 60);
}
$minutes = 0;
$seconds = 0;
if ($hoursRemaind > 0) {
// 分
$minutes = floor(abs($hoursRemaind / 60));
// 秒
$seconds = $hoursRemaind % 60;
}
echo $days . '日';
if ($hours > 0) {
echo $hours . '時間';
}
if ($minutes > 0) {
echo $minutes . '分';
}
if ($seconds > 0) {
echo $seconds . '秒';
}