改进whereTime查询

This commit is contained in:
thinkphp
2017-09-21 12:42:35 +08:00
parent 8aeb20dcd4
commit d9b21a33d8

View File

@@ -1651,15 +1651,17 @@ class Query
* 查询日期或者时间 * 查询日期或者时间
* @access public * @access public
* @param string $field 日期字段名 * @param string $field 日期字段名
* @param string $op 比较运算符或者表达式 * @param string|array $op 比较运算符或者表达式
* @param string|array $range 比较范围 * @param string|array $range 比较范围
* @return $this * @return $this
*/ */
public function whereTime($field, $op, $range = null) public function whereTime($field, $op, $range = null)
{ {
if (is_null($range)) { if (is_null($range)) {
if (is_array($op)) {
$range = $op;
} else {
// 使用日期表达式 // 使用日期表达式
$date = getdate();
switch (strtolower($op)) { switch (strtolower($op)) {
case 'today': case 'today':
case 'd': case 'd':
@@ -1667,15 +1669,15 @@ class Query
break; break;
case 'week': case 'week':
case 'w': case 'w':
$range = 'this week 00:00:00'; $range = ['this week 00:00:00', 'next week 00:00:00'];
break; break;
case 'month': case 'month':
case 'm': case 'm':
$range = mktime(0, 0, 0, $date['mon'], 1, $date['year']); $range = ['first Day of this month 00:00:00', 'first Day of next month 00:00:00'];
break; break;
case 'year': case 'year':
case 'y': case 'y':
$range = mktime(0, 0, 0, 1, 1, $date['year']); $range = ['this year 1/1', 'next year 1/1'];
break; break;
case 'yesterday': case 'yesterday':
$range = ['yesterday', 'today']; $range = ['yesterday', 'today'];
@@ -1684,14 +1686,15 @@ class Query
$range = ['last week 00:00:00', 'this week 00:00:00']; $range = ['last week 00:00:00', 'this week 00:00:00'];
break; break;
case 'last month': case 'last month':
$range = [date('y-m-01', strtotime('-1 month')), mktime(0, 0, 0, $date['mon'], 1, $date['year'])]; $range = ['first Day of last month 00:00:00', 'first Day of this month 00:00:00'];
break; break;
case 'last year': case 'last year':
$range = [mktime(0, 0, 0, 1, 1, $date['year'] - 1), mktime(0, 0, 0, 1, 1, $date['year'])]; $range = ['last year 1/1', 'this year 1/1'];
break; break;
default: default:
$range = $op; $range = $op;
} }
}
$op = is_array($range) ? 'between' : '>'; $op = is_array($range) ? 'between' : '>';
} }
$this->where($field, strtolower($op) . ' time', $range); $this->where($field, strtolower($op) . ' time', $range);