【问题标题】:Comparing timestamp from database to last 6 months将数据库中的时间戳与过去 6 个月的时间戳进行比较
【发布时间】:2018-05-25 00:07:36
【问题描述】:

我正在使用 laravel,由于某种原因,我的逻辑无法正确应用。

这里的 if 语句应该从数据库中获取结果,并查看 created_at 时间戳是否在最近 6 个月内。如果是这样,我在下面有一个用于“newCust”的 css 类。如果 created_at 时间戳超过 6 个月,则不应应用。

我正在使用 subMonth 来获取过去 6 个月,但它似乎不适用,因为现在它将 CSS 类应用于所有行,所以我想知道我的日期比较是否在这里关闭。

$d->createdAt = new \DateTime($d->created_at);  // created_at is full timestamp (2011-01-01 00:00:00)
$deadline = Carbon::now()->subMonths(6)->format('Y-m-d H:i:s');
if($d->createdAt > $deadline){  // I'm trying to say here that if the created_at timestamp is within the last 6 months, then apply following logic
$d->call_status = 'newCust';
}

【问题讨论】:

  • 为什么不对这两个时间戳使用Carbon?您正在混合 \DateTimeCarbon,这可能会影响比较逻辑。
  • 您还将 DateTime 对象与字符串进行比较,这可能会使事情变得混乱。 Carbon 有 comparison functions,所以就用它吧。

标签: php laravel php-carbon


【解决方案1】:

您可以使用Carbon进行比较:

如果$d 是一个模型的实例,created_at 应该已经是一个碳对象

$deadline = Carbon::now()->subMonths(6);

if($d->created_at.gt($deadline)){  
    // Do something 
    // Set the format here
}   

碳有多重比较功能:

  • eq() 等于
  • ne() 不等于
  • gt() 大于
  • gte() 大于等于
  • lt() 小于
  • lte() 小于或等于

【讨论】:

    【解决方案2】:

    只使用普通的旧 DateTime 这将做你想要的

    $createdAt = new \DateTime('2017-11-17 00:00:00');
    echo $createdAt->format('d/m/Y H:i:s') . PHP_EOL;
    
    $deadline = new \DateTime();
    $deadline->sub( new DateInterval('P6M') );
    echo $deadline->format('d/m/Y H:i:s') . PHP_EOL;
    
    if ($createdAt > $deadline) {
        echo 'YES';
    }else{
        echo 'NO';
    }
    

    调整$createdAt使用的日期进行测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-16
      • 1970-01-01
      • 1970-01-01
      • 2012-11-06
      • 2017-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多