我正在尝试建立图书馆预订系统,因此当用户借书时,他们将在发布日期后的7天(设置为CURRENT_TIMESTAMP)上设置截止日期。但是,有没有办法让我在php / html代码中仅使用CURRENT_TIMESTAMP + 7天?还是我需要添加另一个表列以在数据库中设置到期日变量?
我尝试更改数据库中的变量(精细),该变量在截止日期之前在我的数据库中是不需要的。但是,这弄乱了数据不会显示的全部内容。
因此,目前,我正尝试通过DATE_ADD函数将7天添加到IssueDate变量中。但是,这将不允许代码显示。
<tr>
<th>#</th>
<th>Book Name</th>
<th>ISBN </th>
<th>Issued Date</th>
<th>Due Date</th>
<th>Action</th>
</tr>
</thead>
<tbody>
<?php
$sid=$_SESSION['stdid'];
$sql="SELECT tblbooks.BookName,tblbooks.ISBNNumber,tblissuedbookdetails.IssuesDate,tblissuedbookdetails.ReturnDate,tblissuedbookdetails.id as rid,tblissuedbookdetails.fine from tblissuedbookdetails join tblstudents on tblstudents.StudentId=tblissuedbookdetails.StudentId join tblbooks on tblbooks.id=tblissuedbookdetails.BookId where tblstudents.StudentId=:sid order by tblissuedbookdetails.id desc";
$query = $dbh -> prepare($sql);
$query-> bindParam(':sid', $sid, PDO::PARAM_STR);
$query->execute();
$results=$query->fetchAll(PDO::FETCH_OBJ);
$cnt=1;
if($query->rowCount() > 0)
{
foreach($results as $result)
{ ?>
<tr class="odd gradeX">
<td class="center"><?php echo htmlentities($cnt);?></td>
<td class="center"><?php echo htmlentities($result->BookName);?></td>
<td class="center"><?php echo htmlentities($result->ISBNNumber);?></td>
<td class="center"><?php echo htmlentities($result->IssuesDate);?></td>
<td class="center"><?php if($result->ReturnDate=="")
{?>
<span style="color:red">
<?php echo htmlentities("Not Return Yet"); ?>
</span>
<?php } else {
echo htmlentities($result->SELECT DATE_ADD(d,7,IssuesDate));
}
?></td>
<td class="center">
<a href="test-return.php?rid=<?php echo htmlentities($result->rid);?>">
<button class="btn btn-primary"><i class="fa fa-edit "></i>Extend</button>
</td>
</tr>
<?php $cnt=$cnt+1;}} ?>
</tbody>
任何“工作代码”都不会在“到期日”表列中显示结果,而那些不正常的结果仅表示存在意外变量,符号等。
答案 0 :(得分:0)
您需要使用PHP而不是SQL计算7天。在您的else块中使用以下代码来计算和显示到期日期。
$datetime = new DateTime( $result->IssuesDate );
$datetime->modify('+7 days');
echo $datetime->format('Y-m-d');
答案 1 :(得分:0)
CURRENT_TIMESTAMP + 7 days
标准SQL中的正确语法为:
CURRENT_TIMESTAMP + INTERVAL 7 DAY
(您的查询是有效的,但没有执行您认为的操作。)
您可能希望允许一整天,因此可以使用CURRENT_DATE
而不是CURRENT_TIMESTAMP
来缩短时间:
SELECT CURRENT_DATE AS today, CURRENT_DATE + INTERVAL 7 DAY AS due_date;
+------------+------------+
| today | due_date |
+------------+------------+
| 2019-07-13 | 2019-07-20 |
+------------+------------+