【目的】
cron機能を使用し、起算日やflagなどをもとに、自動削除する際の照合方法について纏めます。
以下、起算日(上記、フォームより変更できます)の前日未満を失効対象とするケース
| 日付の設定 | |
|---|---|
| 只今の日付 | 2025-11-06 |
| 対象月日 | 詳細 | 備考 |
|---|---|---|
| ★2025-11-05 | 1日前 | 継続中 |
| 2025-11-04 | 2日前 | 失効します |
| 2025-11-03 | 3日前 | 失効します |
| 2025-11-02 | 4日前 | 失効します |
| 2025-11-01 | 5日前 | 失効します |
| 2025-10-31 | 6日前 | 失効します |
| 2025-10-30 | 7日前 | 失効します |
/*--- php ---*/
//日付設定(postデータの有無で分岐)
if(!isset($_POST['post_date'])){
$toDay = date("Y-m-d");
} else {
$toDay = date($_POST['post_date']);
}
//日付を数値へ変換
for($i = 1; $i <= 7; $i++){
$fromDay[$i] = date("Y-m-d",strtotime("$toDay -{$i} day"));
$fromstr[$i] = strtotime($fromDay[$i]);
}
//日付設定※数値計算用(postデータの有無で分岐)
if(!isset($_POST['post_date'])){
$todate = strtotime($toDay);
} else {
$todate = strtotime($_POST['post_date']);
}
/*--- html+php ---*/
<table class="table1">
<tr>
<th>対象月日</th><th>詳細</th><th>備考</th>
</tr>
<?php for($i = 1; $i <= 7; $i++){ ?>
<tr>
<?php if((($todate - $fromstr[$i]) / 86400) == 1){ ?>
<td>★<?=$fromDay[$i]?></td>
<td><?=$i?>日前</td>
<td>継続中</td>
<?php } else { ?>
<td><span class="target1"><?=$fromDay[$i]?></span></td>
<td><span class="target1"><?=$i?>日前</span></td>
<td><span class="target1">失効します</span></td>
<?php } ?>
</tr>
<?php } ?>
</table>
以下、起算日(2020-06-28で設定)未満を失効するケース
| 対象月日 | 詳細 | 備考 |
|---|---|---|
| 2020-06-26 | -2日前 | 失効します |
| 2020-06-27 | -1日前 | 失効します |
| ★2020-06-28 | 0日前 | 継続中 |
/*--- php ---*/
//仮データベース
$datebase[] = array(
'date' => '2020-06-26',
'flag' => 0
);
$datebase[] = array(
'date' => '2020-06-27',
'flag' => 1
);
$datebase[] = array(
'date' => '2020-06-28',
'flag' => 0
);
//仮の起算日の設定
$testdate = "2020-06-28";
$test = strtotime($testdate);
/*--- html+php ---*/
<table class="table1">
<tr>
<th>対象月日</th><th>詳細</th><th>備考</th>
</tr>
<?php foreach($datebase as $val){ ?>
<tr>
<?php $todate2 = strtotime($val['date']);
if((($todate2 - $test) / 86400) < 0){ ?>
<td><span class="target1"><?=$val['date']?></span></td>
<td><span class="target1"><?=($todate2 - $test) / 86400?>日前</span></td>
<td><span class="target1">失効します</span></td>
<?php } else {?>
<td>★<?=$val['date']?></td>
<td><?=($todate2 - $test) / 86400?>日前</td>
<td>継続中</td>
<?php } ?>
</tr>
<?php } ?>
</table>
以下、flagで失効するケース
| 対象月日 | 詳細 | 備考 |
|---|---|---|
| 2020-06-26 | -2日前 | 失効します |
| ★2020-06-27 | -1日前 | 継続中 |
| 2020-06-28 | 0日前 | 失効します |
/*--- php ---*/
//仮データベース
$datebase[] = array(
'date' => '2020-06-26',
'flag' => 0
);
$datebase[] = array(
'date' => '2020-06-27',
'flag' => 1
);
$datebase[] = array(
'date' => '2020-06-28',
'flag' => 0
);
//仮の起算日の設定
$testdate = "2020-06-28";
$test = strtotime($testdate);
/*--- html+php ---*/
<table class="table1">
<tr>
<th>対象月日</th><th>詳細</th><th>備考</th>
</tr>
<?php foreach($datebase as $val){ ?>
<tr>
<?php $todate2 = strtotime($val['date']);
if($val['flag'] !== 1){ ?>←変更箇所
<td><span class="target1"><?=$val['date']?></span></td>
<td><span class="target1"><?=($todate2 - $test) / 86400?>日前</span></td>
<td><span class="target1">失効します</span></td>
<?php } else {?>
<td>★<?=$val['date']?></td>
<td><?=($todate2 - $test) / 86400?>日前</td>
<td>継続中</td>
<?php } ?>
</tr>
<?php } ?>
</table>
これらをもとに、cronを使用し、定時操作を行い、
SQL(DELETE)実行時に照合すれば、失効対象を自動削除できると考えております。
※検証はしておりません。