我有一个字符串,其日期和时间格式为2013-07-01 19:10:05 (Y-m-d H:i:s)
。
当我从存储日期和时间的数据库输出数据时,我想看看自日期和时间以来是否已经过了三天。
实施例:
存储在数据库中的是2013-07-01 00:00:00
。
存储日期和时间后3天将是2013-07-03 00:00:00
。
如果确实如此,我想回复一些文字。
我尝试了以下但我认为我完全没有航行。
if( strtotime('-3 days') < strtotime($row["orderdatetime"]) ) {
echo " <img src='imgs/warning.png' ></td >";
}
感谢任何帮助!
此致 安德烈亚斯
修改
这就是我的PHP脚本的样子。
if ($row["confirmeddatetime"] == "0000-00-00 00:00:00" ) {
$db_datetime = new DateTime($row['orderdatetime']);
$db_plus_three = $db_datetime->add(new DateInterval('P3D'));
$now_datetime = new DateTime();
if ($db_plus_three < $now_datetime) {
echo " <img src='imgs/warning.png' ></td >";
} else {
echo "</td >";
}
你们中的任何人都可以确定是否有问题吗?
答案 0 :(得分:2)
我建议使用DateTime和DateInterval类。
$db_datetime = new DateTime($row['orderdatetime']);
$db_plus_three = $db_datetime->add(new DateInterval('P3D'));
$now_datetime = new DateTime();
if ($db_plus_three < $now_datetime) {
// this is more than 3 days old
}
另一种方法是在DB查询中设置一个标志,如下所示:
SELECT
[YOUR CURRENT FIELDS HERE],
(CASE WHEN NOW() > DATE_ADD(orderdatetime, INTERVAL 3 DAYS) THEN 1 ELSE 0) AS three_days_old
[REST OF QUERY HERE]
然后,您可以通过查看three_days_old
值来轻松识别该项目是否超过3天。
答案 1 :(得分:1)
可能最简单的方法是直接从数据库获取unix时间(假设是mysql):
SELECT *, UNIX_TIMESTAMP(orderdatetime) AS ordertimestamp...
然后在你的比较中你只需要
if( strtotime('-3 days') < $row["ordertimestamp"] ) {
echo " <img src='imgs/warning.png' ></td >";
}
答案 2 :(得分:0)
strtotime将时间字符串转换为时间戳,该时间戳只是整数秒。只需比较时间减去3 * 86400(一天中的秒数)
答案 3 :(得分:0)
SELECT (orderdatetime <= NOW() + INTERVAL 3 DAY) AS threedays ...
如果3天过去了,你会得到1/0的真/假值。我建议不要在PHP中进行这样的比较,因为你将强制使用mysql日期 - &gt; string - &gt; int - &gt;日期转换链,当您可以直接在mysql中进行比较时,浪费了大量的CPU周期。
答案 4 :(得分:0)
实际上你的第二个例子对我有用,只要注意add()
函数,它就会更新值本身。这是我自己如何使用它的类似示例:
/**
* Checks if the elapsed time between $startDate and now, is bigger
* than a given period. This is useful to check an expiry-date.
* @param DateTime $startDate The moment the time measurement begins.
* @param DateInterval $validFor The period, the action/token may be used.
* @return bool Returns true if the action/token expired, otherwise false.
*/
function isExpired(DateTime $startDate, DateInterval $validFor)
{
$now = new DateTime();
$expiryDate = clone $startDate;
$expiryDate->add($validFor);
return $now > $expiryDate;
}
// how to use it
$startDate = new DateTime('2013-06-16 12:36:34');
$validFor = new DateInterval('P3D'); // valid for 3 days
$isExpired = isExpired($startDate, $validFor);