比较laravel 5.4中的时间和日期

时间:2017-06-14 14:41:37

标签: php laravel laravel-5

我需要检查时间是否在某个时间字符串之后或之前。我给出的数据库有多种格式,如00:00:001970-01-01 07:00:00。这是我想要做的:

data = {some_id:1, time_1:'1970-01-01 07:00:00', time_2:'1970-01-01 07:00:00'}

    $results = $this->model->select(
        'table.value as value'
    )
        ->where('table.some_id', '=', $data['some_id'])
        ->where('table.time_1', '=>', $data['time_1'])
        ->orWhere('table.time_2', '<=', $data['time_2'])
        ->get();

但是,这只返回表中的每个值。当它们不是技术日期时,如何比较这样的日期?

2 个答案:

答案 0 :(得分:2)

当然会返回所有记录。

因为查询逻辑不正确。

对于您的查询,sql将如下:

SELECT table.value AS value 
FROM table 
WHERE 
  table.some_id = 1 
  AND 
  table.time_1 <= '1970-01-01 07:00:00' OR table.time_2 => '1970-01-01 07:00:00'

但它应该是:

SELECT table.value AS value 
FROM table 
WHERE 
  table.some_id = 1 
  AND 
  (table.time_1 <= '1970-01-01 07:00:00' OR table.time_2 => '1970-01-01 07:00:00')

要实现这一点,请执行以下操作:

$results = $this->model->select(
    'table.value as value'
)
    ->where('table.some_id', '=', $data['some_id'])
    ->where(function($q) use ($data) {
       return $q->where('table.time_1', '=>', $data['time_1'])
                ->orWhere('table.time_2', '<=', $data['time_2']);
    })
    ->get();



附:如果没有返回正确的答复,我建议您查看您要求的日期。

答案 1 :(得分:0)

这将是常规查询

data = {some_id:1,time_1:'1970-01-01 07:00:00',time_2:'1970-01-01 07:00:00'}

$results = $this->model->select('table.value as value')
           ->where([
               ['table.some_id', '=', $data['some_id']],
               [function($query) use($data){
                  query->where('table.time_1', '=>', $data['time_1'])
                       ->orWhere('table.time_2', '<=', $data['time_2']);
               }]
             ])->get();

如果您需要转换日期,则会有一个名为date()的函数,它会将时间戳转换为具有给定格式的日期。例如:

$date = 1497454883;
$date = date('Y-m-d H:i:s',$date);

日期将是“2017-06-14 23:00:00”

如果您有任何问题,请告诉我。