代码之家  ›  专栏  ›  技术社区  ›  RedBlueThing

如何比较PHP5.2.8中的两个DateTime对象?

  •  266
  • RedBlueThing  · 技术社区  · 15 年前

    看看PHP文档,下面是 DateTime 对象似乎都能解决我的问题:

    doco 在版本>=5.3(毫不奇怪,如果我试着给他们打电话,我发现他们根本不存在)。我找不到5.2.8的任何特定文档,因此我不确定在我的版本中是否有等效的方法。我有 Googled 解决了这个问题,找到了一系列折衷的解决方案,没有一个能满足我非常简单的要求:

    • 如何比较两个DateTime对象?

    对于某些上下文,我有以下代码:

    $st_dt = new DateTime(verifyParam ('start_date'));
    $end_dt = new DateTime(verifyParam ('end_date'));
    
    // is the end date more ancient than the start date?
    if ($end_dt < $start_dt) 
    

    编辑

    显然地 我的假设是完全错误的(感谢米伦如此有效地说明了这一点)。有一个比较运算符,它工作得很好,谢谢。有时候我真的很想念编译器。错误在上面的代码中,我相信您会比我更快地找到它:)。

    7 回复  |  直到 5 年前
        1
  •  475
  •   Milen A. Radev    15 年前

    以下内容似乎证实了DateTime类存在比较运算符:

    dev:~# php
    <?php
    date_default_timezone_set('Europe/London');
    
    $d1 = new DateTime('2008-08-03 14:52:10');
    $d2 = new DateTime('2008-01-03 11:11:10');
    var_dump($d1 == $d2);
    var_dump($d1 > $d2);
    var_dump($d1 < $d2);
    ?>
    bool(false)
    bool(true)
    bool(false)
    dev:~# php -v
    PHP 5.2.6-1+lenny3 with Suhosin-Patch 0.9.6.2 (cli) (built: Apr 26 2009 20:09:03)
    Copyright (c) 1997-2008 The PHP Group
    Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
    dev:~#
    
        2
  •  72
  •   Pang firemonkey    7 年前

    从…起 the official documentation :

    comparison operators .

    $date1 = new DateTime("now");
    $date2 = new DateTime("tomorrow");
    
    var_dump($date1 == $date2); // false
    var_dump($date1 < $date2); // true
    var_dump($date1 > $date2); // false
    

    diff .

    $datetime1 = new DateTime('2009-10-11'); // 11 October 2013
    $datetime2 = new DateTime('2009-10-13'); // 13 October 2013
    
    $interval = $datetime1->diff($datetime2);
    echo $interval->format('%R%a days'); // +2 days
    
        3
  •  33
  •   Julien    12 年前

    $d1->format('U') < $d2->format('U')
    

    资料来源: http://laughingmeme.org/2007/02/27/looking-at-php5s-datetime-and-datetimezone/ (关于DateTime的非常有趣的文章)

        4
  •  23
  •   krsteeve    11 年前

    如果要比较日期而不是时间,可以使用以下方法:

    $d1->format("Y-m-d") == $d2->format("Y-m-d")
    
        5
  •  1
  •   Kyle Coots    10 年前
    $elapsed = '2592000';
    // Time in the past
    $time_past = '2014-07-16 11:35:33';
    $time_past = strtotime($time_past);
    
    // Add a month to that time
    $time_past = $time_past + $elapsed;
    
    // Time NOW
    $time_now = time();
    
    // Check if its been a month since time past
    if($time_past > $time_now){
        echo 'Hasnt been a month';    
    }else{
        echo 'Been longer than a month';
    }
    
        6
  •  1
  •   jens1o    6 年前

    从PHP 7.x开始,您可以使用以下内容:

    $aDate = new \DateTime('@'.(time()));
    $bDate = new \DateTime('@'.(time() - 3600));
    
    $aDate <=> $bDate; // => 1, `$aDate` is newer than `$bDate`
    
        7
  •  -1
  •   Dylan KAS    3 年前

    你提到 DateTime::diff 要比较两个日期,可以使用它获得比布尔值更精确的值。

    例如,天数:

    $date1 = new DateTime('2021-07-09');
    $date2 = new DateTime('2020-10-21');
    
    echo $date1->diff($date2)->format('%R%a days');
    

    但您也可以使用的别名 DateTime::diff 那是 date_diff (PHP5>=5.3.0、PHP7、PHP8)

    $date1 = new DateTime('2021-07-09');
    $date2 = new DateTime('2020-10-21');
    
    echo date_diff($date1, $date2)->format('%R%a days');
    
        8
  •  -2
  •   Pang firemonkey    7 年前

    这可能对你有帮助。

    $today = date("m-d-Y H:i:s");
    $thisMonth =date("m");
    $thisYear = date("y");
    $expectedDate = ($thisMonth+1)."-08-$thisYear 23:58:00";
    
    
    if (strtotime($expectedDate) > strtotime($today)) {
        echo "Expected date is greater then current date";
        return ;
    } else
    {
     echo "Expected date is lesser then current date";
    }