DATEDIFF创建PHP代码的功能

时间:2013-10-14 16:43:59

标签: php

我正在尝试将以下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预先格式化日期

非常欢迎任何帮助。谢谢!

3 个答案:

答案 0 :(得分:2)

在对DateTime进行date_diff()之前,您需要将数据库数据转换为$today = new DateTime('now'); $date = new DateTime($row['date']); $diff = date_diff($date,$today); 对象。

$diff

现在意识到,由于DateIntervalif ($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
    }