Are PHP DateInterval comparable like DateTime?

前端 未结 7 2073
孤城傲影
孤城傲影 2020-12-03 13:36

I discovered that a DateTime object in PHP can be compared to another as the \">\" and \"<\" operators are overloaded.

Is it the same with DateInterval?

A

相关标签:
7条回答
  • 2020-12-03 14:13

    Looks like there was a related bug/feature request, not sure if that ever made it in the trunk. It's not documented (that I Can find) either way - so probably not safe to use.

    That said, after some testing it seems that they can be compared, but only after they've been 'evaluated' in some way (doing a var dump changes the outcome). Here's my test/result:

    <?php
    $int15 = new DateInterval('P15D');
    $int20 = new DateInterval('P20D');
    
    var_dump($int15 > $int20); //should be false;
    var_dump($int20 > $int15); //should be true;
    
    var_dump($int15 < $int20); //should be true;
    var_dump($int20 < $int15); //should be false;
    
    var_dump($int15);
    var_dump($int20);
    
    var_dump($int15 > $int20); //should be false;
    var_dump($int20 > $int15); //should be true;
    
    var_dump($int15 < $int20); //should be true;
    var_dump($int20 < $int15); //should be false;
    
    $date = new DateTime();
    $diff = $date->diff(new DateTime("+10 days"));
    
    var_dump($int15 < $diff); //should be false;
    var_dump($diff < $int15); //should be true;
    
    var_dump($int15 > $diff); //should be true;
    var_dump($diff > $int15); //should be false;
    
    var_dump($diff);
    
    var_dump($int15 < $diff); //should be false;
    var_dump($diff < $int15); //should be true;
    
    var_dump($int15 > $diff); //should be true;
    var_dump($diff > $int15); //should be false;
    

    Result (I've omitted the full dumps of the interval objects):

    bool(false)
    bool(false)
    bool(false)
    bool(false)
    object(DateInterval)#1 (8) {...}
    object(DateInterval)#2 (8) {...}
    bool(false)
    bool(true)
    bool(true)
    bool(false)
    
    bool(false)
    bool(true)
    bool(true)
    bool(false)
    object(DateInterval)#5 (8) {...}
    bool(false)
    bool(true)
    bool(true)
    bool(false)
    
    0 讨论(0)
提交回复
热议问题