我正在尝试将以下MYSQL SELECT代码转换为php代码:DATEDIFF(date, NOW()) <= 31
basicaly如果日期小于或等于31天则执行其余操作。
到目前为止,我所做的是以下
$today = new DateTime('now');
$date = $row['date'];
$diff = date_diff($date,$today);
并且如果周期我有条件:if ($diff <= 31)
我的Sql日期列仅指定为Date而不是DateTime我收到以下错误,我想知道如何只计算日期
Warning: date_diff() expects parameter 1 to be DateTime, string given in D:\xampp\htdocs\website\c.php on line 299
bool(false)
Warning: date_diff() expects parameter 1 to be DateTime, string given in D:\xampp\htdocs\website\c.php on line 299
bool(false)
使得下面的答案无法正常工作的条件是我在SQL查询中使用DATE_FORMAT(date,'%d %b %Y') as date
预先格式化日期
非常欢迎任何帮助。谢谢!
答案 0 :(得分:2)
在对DateTime
进行date_diff()
之前,您需要将数据库数据转换为$today = new DateTime('now');
$date = new DateTime($row['date']);
$diff = date_diff($date,$today);
对象。
$diff
现在意识到,由于DateInterval
是if ($date->days <= 31) {
// do something
}
对象,而您只关心days组件,因此您可以这样评估:
{{1}}
答案 1 :(得分:1)
尝试:
$today = new DateTime('now');
$date = new DateTime($row['date']);
$diff = $date->diff($today)->days;
date_diff要求两个参数都是DateTime对象。这就是它抱怨的东西。 date_diff或Datetime :: diff返回DateInterval,你可以从days成员变量中获取天数
答案 2 :(得分:0)
以下是算法:
$then = new DateTime('2010-05-30');//example, you could use $row['date']
$now = new DateTime();//now
$delta = $now->diff($then);
$data = array(
'year' => $delta->y,
'month' => $delta->m,
'day' => $delta->d,
'hour' => $delta->h,
'minute' => $delta->i,
'second' => $delta->s
);
//now
if($data['day'] <= 31)
{
//do the stuff
}