我需要一些帮助来解决一个简单的问题,但我无法弄清楚它是如何正常工作的
我将日期存储在 MySQL 中,例如 01/02/2012 07:40:23
这个日期被提取到 $list['timeadded'] 变量中的 php 中。
我需要检查当前日期与该日期之间的差异是否小于或等于 7 天,然后我将显示天数的差异,否则回显关闭。
有人可以帮我解决这个问题吗?
谢谢
我认为这可能会满足您的需求(将此添加到您的查询中)
WHERE CURDATE() >= STR_TO_DATE( datecol
, "%c/%d/%Y %H:%i:%s") - 间隔 7 天
PHP版本
$list['timeadded'] = '01/02/2012 07:40:23';
$dt1 = new DateTime($list['timeadded']);
$dt2 = new DateTime();
$dt2->sub(new DateInterval('P7D'));
$interval = $dt1->diff($dt2);
echo $interval->format('%d days');
您可以获得使用天数$interval->d
我现在您正在寻找 PHP 解决方案,但您可以直接在 SQL 中以有效的方式完成这项工作,并且您可以避免签入 php。查看演示 URL 并检查输出。
http://sqlfiddle.com/#!2/ca91e/26
桌子:
create table t (id int(3), date varchar(40));
insert into t values (1, '25/03/2013 07:40:23'),
(2, '26/03/2013 07:40:23'),
(3, '20/03/2013 07:40:23');
SQL:
SELECT id, date_format(curdate(), '%Y-%m-%d %h:%i:%s') AS CurrDate,
date_format(STR_TO_DATE(date, '%d/%m/%Y %h:%i:%s'), '%Y-%m-%d %h:%i:%s') AS MyDate,
if(datediff(date_format(curdate(), '%Y-%m-%d %h:%i:%s'), date_format(STR_TO_DATE(date, '%d/%m/%Y %h:%i:%s'), '%Y-%m-%d %h:%i:%s'))<=7,
datediff(date_format(curdate(), '%Y-%m-%d %h:%i:%s'), date_format(STR_TO_DATE(date, '%d/%m/%Y %h:%i:%s'), '%Y-%m-%d %h:%i:%s')), 'closed') AS Text
FROM t;
输出:
ID CURRDATE MYDATE TEXT
1 2013-03-29 12:00:00 2013-03-25 07:40:23 4
2 2013-03-29 12:00:00 2013-03-26 07:40:23 3
3 2013-03-29 12:00:00 2013-03-20 07:40:23 closed
在您的查询中,我会在该字段上使用 UNIX_TIMESTAMP()。所以:
SELECT
UNIX_TIMESTAMP(timeadded) AS timeadded
FROM `your_table`
然后,有了这个结果,我会从当前日期中减去它。所以:
$difference = (time()-$list['timeadded']);
我现在有时差,以秒为单位。您可以使用 将其格式化为天、分钟或小时date()
。
您可以使用此处描述的 datediff 函数:http ://www.php.net/manual/en/datetime.diff.php或者您可以编写自己的函数来计算两个日期之间的差异,方法是将它们转换为 unix 时间戳,然后计算两者之间的秒数,然后计算天数。
function numberOfDays($datecol) {
$dateSeconds = strtotime($datecol);
$now = time();
$seconds = $now - $dateSeconds;
//calcualte the number of days
$days = $seconds / (60 * 60 * 24);
return $days
}