【问题标题】:Comparing a database date field with date将数据库日期字段与日期进行比较
【发布时间】:2019-05-08 08:53:26
【问题描述】:

比较数据库日期和日期

我要检查数据库日期字段是否小于 5 天

我尝试使用 Carbon 类以整数形式输出值,MySQL 数据库以字符串或对象形式返回值

$ticket = Tickets::select('created_at')->where('id','=',$id)->get();

我想检查这个日期的结果是否小于 5 天 例如,如果当前结果日期为 01-05-2019,则消息应为“票证超过 5 天”

【问题讨论】:

  • 哪一列是要比较的日期类型?
  • 类型为时间戳
  • 其实我想检查一下机票日期是否超过 5 天
  • 为了确保我理解您的问题,您是否仍想获得超过 5 天的票?您能否展示您希望如何显示消息,例如将其传递给刀片文件还是仅从控制器返回该字符串?
  • 是从控制器返回字符串

标签: php mysql laravel date


【解决方案1】:

这应该适合你。这将返回与今天的日期差。

$ticket = Tickets::selectRaw('abs(datediff(created_at,"'.\Carbon\Carbon::now().'")) as day')->where('id','=',$id)->first();

【讨论】:

    【解决方案2】:

    我认为您可以将当前日期更改为少 5 天并进行比较

      $date = new DateTime;
      $date->modify('-5 days');
      $formatted_date = $date->format('Y-m-d H:i:s');
    
      $ticket = Tickets::where('created_at', $formatted_date)->where('id','=',$id)->first();
    

    如果您只想忽略时间戳和比较日期,您可能需要这样做

     $formatted_date = $date->format('Y-m-d');
     $ticket = Tickets::where(Date('created_at'), $formatted_date)->where('id','=',$id)->first();
    

    我还没有测试过,但这些代码似乎对你来说应该可以正常工作。

    【讨论】:

      【解决方案3】:

      我已经创建了模型范围

      关于范围的更多信息:

      所以将这个作用域方法添加到您的模型中,即Ticket

         /**
           * Scope a query to only include the last n days records
           *
           * @param  \Illuminate\Database\Eloquent\Builder $query
           * @return \Illuminate\Database\Eloquent\Builder
           */
          public function scopeWhereDateOccurs($query, $fieldName, $upToDate,$noOfDays = 5)
          {
              $startFrom = \Illuminate\Support\Carbon::parse($upToDate)->toDateTimeString();
              $endUpTo =  \Illuminate\Support\Carbon::createFromDate( $startFrom)->subDays( $noOfDays)->toDateTimeString();
      
              return $query->whereDate($fieldName, '>=', $startFrom)->whereDate($fieldName, '<=', $endUpTo);
          }
      

      所以现在我们完成了方法

      现在在你的控制器中

      $ticket = Tickets::where('id','=',$id)
                        ->WhereDateOccurs( 'created_at', '01-05-2019',5)
                        ->get();
      

      这是生成的查询日志

      SELECT * 
      FROM   `tickets` 
      WHERE  Date(`created_at`) >= ? 
             AND Date(`created_at`) <= ? 
             AND `id` = ? 
             AND `tickets`.`deleted_at` IS NULL 
      

      我正在使用 softdeletes,所以 deleted_at IS NULL 被添加到所有查询生成器中。

      【讨论】:

      • 看来您已经通过复制粘贴的方式发布了四个答案(包括这个答案)。我通常将其标记为重复,但您似乎已经对这些进行了一些调整,因此其中一些会在唯一性方面逃脱。一般来说,请不要寻找机会重新粘贴您的答案 - 它也会复制+粘贴错误,随着时间的推移,答案会开始出现分歧。
      • 问题是onetwothreefour
      猜你喜欢
      • 2018-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多