0

我正在尝试将以下 MYSQL SELECT 代码转换为 php 代码:DATEDIFF(date, NOW()) <= 31基本上如果日期小于或等于 31 天,则其余部分。

到目前为止,我所做的是以下

$today = new DateTime('now');
$date = $row['date'];
$diff = date_diff($date,$today);

而不是在 if 循环中我有条件: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

任何帮助都将受到欢迎。谢谢!

4

3 回答 3

2

在对它进行操作之前,您还需要将数据库数据转换为DateTime对象date_diff()

$today = new DateTime('now');
$date = new DateTime($row['date']);
$diff = date_diff($date,$today);

现在意识到,因为$diff它是一个DateInterval对象,并且您只关心 days 组件,您可以像这样评估:

if ($date->days <= 31) {
    // do something
}
于 2013-10-14T16:51:24.637 回答
1

尝试:

$today = new DateTime('now');
$date = new DateTime($row['date']);
$diff = $date->diff($today)->days;

date_diff 期望两个参数都是 DateTime 对象。这就是它所抱怨的。date_diff 或 Datetime::diff 返回一个 DateInterval,你可以从 days 成员变量中获取天数

于 2013-10-14T16:46:32.410 回答
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
    }
于 2013-10-14T16:56:27.470 回答