我需要检查时间是否在某个时间字符串之后或之前。我给出的数据库有多种格式,如00:00:00
和1970-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();
但是,这只返回表中的每个值。当它们不是技术日期时,如何比较这样的日期?
答案 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”
如果您有任何问题,请告诉我。