はじめに
こんにちは、普段は業務で求人系サービスの開発を行なっている@taku-0728です。
今回はとある機会で「PHPで24時間以内かどうかの判定」を行う必要があったのですが、
24時間以内かどうかを判定している記事が特に見つからなかったので書いてみようと思います。
個人的にPHPの日付処理ではCarbonが優秀だと思うので、Carbonでやっていきます。
準備
今回はCarbonを使います。CarbonとはPHPのDateTimeクラスをオーバーラップした日付操作ライブラリであり、
Laravelなどでは標準搭載されています。
Carbonがインストールされていない方はcomposerを使ってインストールしてください。
$ composer require nesbot/carbon
詳しくはこちらの記事が参考になるかと思います。
実装
test.php
require __DIR__ . "/vendor/autoload.php";
use Carbon\Carbon;
$targetDay = Carbon::create(2021, 12, 13, 06, 00, 00);
$day = Carbon::create(2021, 12, 14, 06, 00, 00);
$yesterday = $day->copy()->subDay();
if($targetDay->between($yesterday, $day)) {
echo("24時間以内です");
} else {
echo("24時間以内ではありません");
}
解説
$targetDay = Carbon::create(2021, 12, 13, 06, 00, 00);
まず比較対象の時刻を用意します。
$day = Carbon::create(2021, 12, 14, 06, 00, 00);
$yesterday = $day->copy()->subDay();
比較元の時刻と、その時刻の1日前の時刻を用意します。
if($targetDay->between($yesterday, $day)) {
echo("24時間以内です");
} else {
echo("24時間以内ではありません");
}
「24時間以内」かどうかを判定したいので、比較対象の時刻が比較元の1日前の時刻と比較元の時刻の間かどうかを判定すればOKです。
確認
$now = Carbon::create(2021, 12, 14, 06, 00, 00);
$yesterday = $now->copy()->subDay();
$targetDay = Carbon::create(2021, 12, 13, 06, 00, 00);
if($targetDay->between($yesterday, $now)) {
echo("24時間以内です");
} else {
echo("24時間以内ではありません");
}
24時間以内です
$now = Carbon::create(2021, 12, 14, 06, 00, 00);
$yesterday = $now->copy()->subDay();
$targetDay = Carbon::create(2021, 12, 14, 06, 00, 00);
if($targetDay->between($yesterday, $now)) {
echo("24時間以内です");
} else {
echo("24時間以内ではありません");
}
24時間以内です
$now = Carbon::create(2021, 12, 14, 06, 00, 00);
$yesterday = $now->copy()->subDay();
$targetDay = Carbon::create(2021, 12, 13, 05, 59, 59);
if($targetDay->between($yesterday, $now)) {
echo("24時間以内です");
} else {
echo("24時間以内ではありません");
24時間以内ではありません
$now = Carbon::create(2021, 12, 14, 06, 00, 00);
$yesterday = $now->copy()->subDay();
$targetDay = Carbon::create(2021, 12, 14, 06, 00, 01);
if($targetDay->between($yesterday, $now)) {
echo("24時間以内です");
} else {
echo("24時間以内ではありません");
}
24時間以内ではありません