【问题标题】:Laravel Carbon See if date is in the pastLaravel Carbon 查看日期是否为过去
【发布时间】:2018-04-14 01:02:56
【问题描述】:

我对此感到非常困惑,也许这是我没有看到的简单事物。如果我想查看某个日期是否在今天的过去,我应该能够做这样的事情吗?

if( $league->date_start <= Carbon::now() ){
    $join  = false;
    $message = 'Sorry, the league has already started';
}

如果我把日期倒掉

$league->date_start = 2017-07-31 00:00:00
Carbon::now() = 2017-11-01 16:29:27

$league-&gt;date_start 是一个受保护的日期,所以它是一个碳实例

但这不起作用,如果我将其切换到$league-&gt;date_start &gt;= Carbon::now() 它会起作用并且不会让我加入。我知道“联赛”开始日期已经过去,所以不应该是$league-&gt;date_start &lt;= Carbon::now()?????

【问题讨论】:

    标签: php laravel php-carbon


    【解决方案1】:

    将日期与 Carbon 进行比较的基本思想是两个日期都必须采用 Carbon 格式,在您的情况下 Carbon::now() 是但 $league-&gt;date_start 不是,可以使用 Carbon::parse() 进行转换

    有很多方法可以做到这一点:

    • 通过使用&lt;=
    if(Carbon::parse($league->date_start) <= Carbon::now()){
        $join  = false;
        $message = 'Sorry, the league has already started';
    }
    
    • 通过使用lte
    if(Carbon::parse($league->date_start)-> lte(Carbon::now()){
        $join  = false;
        $message = 'Sorry, the league has already started';
    }
    
    • 通过使用lessThanOrEqualTo
    if(Carbon::parse($league->date_start)->lessThanOrEqualTo(Carbon::now()){
        $join  = false;
        $message = 'Sorry, the league has already started';
    }
    

    【讨论】:

      【解决方案2】:

      要检查$date 是否位于(大于或等于今天)或(前天),请使用:

       function isPast($date){ 
      
          return  Carbon::now()->startOfDay()->gte($date);
      
       }
      
      
        // true :  $date is in past
      
        // false:  $date is in today or future
      

      【讨论】:

        【解决方案3】:

        有内置的 Carbon 方法isPast,所以你可以使用:

        $league->date_start->isPast()
        

        判断日期是否过去

        【讨论】:

        【解决方案4】:

        尝试使用if ($league-&gt;date_start-&gt;diffInSeconds() &gt;= 0)diffInSeconds 方法返回当前时间与您的 carbon 实例之间的差异。

        这是 tinker 的输出示例 -

        >>> $now = \Carbon\Carbon::now();
        => Carbon\Carbon {#648
             +"date": "2017-11-01 16:41:04.000000",
             +"timezone_type": 3,
             +"timezone": "UTC",
           }
        >>> $now->diffInSeconds();
        => 5
        >>> $now->diffInSeconds();
        => 7
        >>> $now->diffInSeconds();
        => 8
        >>> $now->diffInSeconds();
        => 10
        >>> $now->diffInSeconds() > 0
        => true
        

        【讨论】:

          【解决方案5】:

          查看carbon docs 上的“比较”部分。您应该调用$first-&gt;lte($second) 来比较两个碳实例。

          【讨论】:

          • 谢谢。这行得通。从技术上讲,我的也有效,只是有一段糟糕的代码阻止了它
          猜你喜欢
          • 1970-01-01
          • 2011-12-26
          • 2017-04-28
          • 2012-01-08
          • 2011-03-18
          • 1970-01-01
          • 2019-11-06
          • 2016-12-01
          相关资源
          最近更新 更多