【问题标题】:Carbon Date Time Hours Comparison碳日期时间小时比较
【发布时间】:2018-03-14 08:27:11
【问题描述】:

如何比较这两者的小时数?

$today = Carbon::now(new \DateTimeZone('Asia/Jakarta'))->toDateTimeString();

$last = EmergencyOrder::select('CreatedDate')
  ->orderBy('CreatedDate', 'desc')
  ->first();

【问题讨论】:

    标签: php laravel datetime compare php-carbon


    【解决方案1】:

    来自Carbon Docs

    $today =  Carbon::now(new \DateTimeZone('Asia/Jakarta'));
    $last = Carbon::parse(EmergencyOrder::select('CreatedDate')
                        ->orderBy('CreatedDate', 'desc')
                        ->first()->CreatedDate); //if there are no records it will fail
    
    //check for equal
    var_dump($today->eq($last));                     // bool(false)
    //check for not equal
    var_dump($today->ne($last));                     // bool(true)
    //check $today < $last
    var_dump($today->gt($last));                     // bool(false)
    //check $today <= $last
    var_dump($today->gte($last));                    // bool(false)
    //check $today > $last
    var_dump($today->lt($last));                     // bool(true)
    //check $today >= $last
    var_dump($today->lte($last));                    // bool(true)
    

    如果你需要区别

    $today->diffInHours($last);
    $today->diffInMinutes($last);
    $today->diffInDays($last);
    

    【讨论】:

    • 谢谢您的回复,顺便说一句,这不起作用,这是错误:(1/1) FatalThrowableError 调用字符串上的成员函数 diffInHours()
    • 我错过了初始化 $today 和 $last 变量,检查一下
    【解决方案2】:

    这个答案的更好版本

    $today =  Carbon::now(new \DateTimeZone('Asia/Jakarta'));
    $last = EmergencyOrder::select('CreatedDate')
                        ->orderBy('CreatedDate', 'desc')
                        ->first();
    if($last) {
    $createdDate = Carbon::parse($last->createdDate);
    $today->diffInHours($createdDate);
    $today->diffInMinutes($createdDate);
    $today->diffInDays($createdDate);
    }
    

    如果失败,这不会给出任何错误。

    【讨论】:

      【解决方案3】:

      //都有简写别名和PHP等效代码:

      var_dump($first->eq($second));                     // bool(false)
      var_dump($first->equalTo($second));                // bool(false)
      var_dump($first == $second);                       // bool(false)
      
      var_dump($first->ne($second));                     // bool(true)
      var_dump($first->notEqualTo($second));             // bool(true)
      var_dump($first != $second);                       // bool(true)
      
      var_dump($first->gt($second));                     // bool(false)
      var_dump($first->greaterThan($second));            // bool(false)
      var_dump($first->isAfter($second));                // bool(false)
      var_dump($first > $second);                        // bool(false)
      
      var_dump($first->gte($second));                    // bool(false)
      var_dump($first->greaterThanOrEqualTo($second));   // bool(false)
      var_dump($first >= $second);                       // bool(false)
      
      var_dump($first->lt($second));                     // bool(true)
      var_dump($first->lessThan($second));               // bool(true)
      var_dump($first->isBefore($second));               // bool(true)
      var_dump($first < $second);                        // bool(true)
      
      var_dump($first->lte($second));                    // bool(true)
      var_dump($first->lessThanOrEqualTo($second));      // bool(true)
      var_dump($first <= $second);                       // bool(true)
      

      【讨论】:

        【解决方案4】:
        echo Carbon::now()->tzName;                        // UTC
        $first = Carbon::create(2012, 9, 5, 23, 26, 11);
        $second = Carbon::create(2012, 9, 5, 20, 26, 11, 'America/Vancouver');
        
        echo $first->toDateTimeString();                   // 2012-09-05 23:26:11
        echo $first->tzName;                               // UTC
        echo $second->toDateTimeString();                  // 2012-09-05 20:26:11
        echo $second->tzName;                              // America/Vancouver
        
        var_dump($first->equalTo($second));                // bool(false)
        // equalTo is also available on CarbonInterval and CarbonPeriod
        var_dump($first->notEqualTo($second));             // bool(true)
        // notEqualTo is also available on CarbonInterval and CarbonPeriod
        var_dump($first->greaterThan($second));            // bool(false)
        // greaterThan is also available on CarbonInterval
        var_dump($first->greaterThanOrEqualTo($second));   // bool(false)
        // greaterThanOrEqualTo is also available on CarbonInterval
        var_dump($first->lessThan($second));               // bool(true)
        // lessThan is also available on CarbonInterval
        var_dump($first->lessThanOrEqualTo($second));      // bool(true)
        // lessThanOrEqualTo is also available on CarbonInterval
        
        $first->setDateTime(2012, 1, 1, 0, 0, 0);
        $second->setDateTime(2012, 1, 1, 0, 0, 0);         // Remember tz is 'America/Vancouver'
        
        var_dump($first->equalTo($second));                // bool(false)
        var_dump($first->notEqualTo($second));             // bool(true)
        var_dump($first->greaterThan($second));            // bool(false)
        var_dump($first->greaterThanOrEqualTo($second));   // bool(false)
        var_dump($first->lessThan($second));               // bool(true)
        var_dump($first->lessThanOrEqualTo($second));      // bool(true)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-08-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多