我正在使用一个系统,该系统告诉我用户将表单中的数据重新提交到数据库的7天中有多少天。下面的脚本测量从原始开始日期/表单最初填写到完成时间的过去天数。
基本上我正在尝试回应两种不同的措施,如果从开始日期开始的日期小于7,那么它应该在过去的7个月中显示出来(&#39;(天数)&#39; < / p>
即。过去7天1天或7天过去4天
如果它已超过7天,那么它应该说'(天数)过期&#39;。 我得到的问题是,我允许我的用户7天提交表格。考虑到这一点,他们并没有过期,因此它已经超过7天的时间范围,因此如果用户需要8天才能完成表格,他们应该只有一天过期,但是我的脚本目前说8天过期,因为它需要考虑到早先的7。
有一种方法,一旦用户超过7天的时间范围我可以减去7天吗?
由于
<?php include 'config.php';
$data = mysql_query("SELECT *, TIMESTAMPDIFF(DAY, date, CURDATE()) AS expire_date FROM supplier_session ORDER BY expire_date ASC")
or die(mysql_error());
echo "<table class=\"table\" style=\"width:995px; font-family: 'Lucida Grande', Tahoma, Verdana, Arial, sans-serif;
font-size:11px;\" >
<tr>
<td style=\"width:100px;\">ID:</td><td>Company Name:</td><td>Company Reg No:</td><td>Application Started:</td><td style=\"width:200px;\">Application Duration:</td><td style=\"width:100px;\">Date:</td><td>Status:</td></tr>";
while($row = mysql_fetch_array( $data )) {
$days = $row['expire_date'];
$when = $days*0;
$str = $row['expire_date'];
$str2 = substr($str, 0); // "quick brown fox jumps over the lazy dog."
if ($when <= 31){
echo "<tr><td style=\"width:100px;\"><p>".$row['id'] . "</p></td>";
echo "<td style=\"width:150px;\"><p>".$row['company_name'] . "</p></td>";
echo "<td style=\"width:150px;\"><p>".$row['company_reg_number'] . "</p></td>";
echo "<td>"; echo date('d/m/Y',strtotime($row['date'])); echo "</td>";
if ($days >= 8) {
echo "<td style=\"width:200px;\"><p>{$str2} days overdue</td>";
}
elseif ($when <= 7){
echo "<td style=\"width:200px;\"><p>{$str2} of 7 days past</td>";
}
}
echo "<tr>";
}
echo "</table>"; //Close the table in HTML
?>
答案 0 :(得分:36)
如果你想从今天开始7天后再使用它:
date('Y-m-d', strtotime('-7 days'))
答案 1 :(得分:5)
$date = $row['expire_date']; //date from database
$str2 = date('Y-m-d', strtotime('-7 days', strtotime($date)));
答案 2 :(得分:1)
您可以使用strtotime()
,但更好的选择是使用DateTime
类。它更易于使用,功能更多。
减去7天的紧凑方法:
$date = '2020-02-03';
echo date_create($date)
->modify('-7 days')
->format('Y-m-d');
这被压缩为链接方法,但是您可以自己创建类的实例并对该对象执行操作。
$dateObject = new \DateTime($date);
$dateObject->modify ('-7 days');
在SQL中也可以这样做,因此,如果您没有理由在PHP中进行操作,则应该在MySQL中进行操作。
答案 3 :(得分:0)
给出的答案只是针对年,月和日的计算,而不是针对小时,分钟等的计算。
因此,如果您昨晚23:59更新了数据库,那么它将在00:01 2分钟后显示1天。
此问题的正确答案应采用以下格式
date('Y-m-d H:i:s');
将为我们提供当前日期Now
或expire_date的年,月,日,时,分和秒。
$expire_date = '2020-01-23 10:12:13'; //Output of the date we mentioned above
$a = date('Y-m-d H:i:s', strtotime('-7 days', strtotime($expire_date)));
echo $a; //Correct result of 7 days past, 2020-01-16 10:12:13
答案 4 :(得分:-1)
经过测试,并且可以正常工作 您可以按照以下方式在php中减去日期。
$test_date = "2020-02-02";
date("Y-m-d", strtotime("-2 days", strtotime($test_date)));