【目的】
cron機能を使用し、起算日やflagなどをもとに、自動削除する際の照合方法について纏めます。
以下、起算日(上記、フォームより変更できます)の前日未満を失効対象とするケース
日付の設定 | |
---|---|
只今の日付 | 2024-11-21 |
対象月日 | 詳細 | 備考 |
---|---|---|
★2024-11-20 | 1日前 | 継続中 |
2024-11-19 | 2日前 | 失効します |
2024-11-18 | 3日前 | 失効します |
2024-11-17 | 4日前 | 失効します |
2024-11-16 | 5日前 | 失効します |
2024-11-15 | 6日前 | 失効します |
2024-11-14 | 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)実行時に照合すれば、失効対象を自動削除できると考えております。
※検証はしておりません。