改进whereTime查询

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

View File

@@ -1651,46 +1651,49 @@ 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)) {
$date = getdate(); $range = $op;
switch (strtolower($op)) { } else {
case 'today': // 使用日期表达式
case 'd': switch (strtolower($op)) {
$range = ['today', 'tomorrow']; case 'today':
break; case 'd':
case 'week': $range = ['today', 'tomorrow'];
case 'w': break;
$range = 'this week 00:00:00'; case 'week':
break; case 'w':
case 'month': $range = ['this week 00:00:00', 'next week 00:00:00'];
case 'm': break;
$range = mktime(0, 0, 0, $date['mon'], 1, $date['year']); case 'month':
break; case 'm':
case 'year': $range = ['first Day of this month 00:00:00', 'first Day of next month 00:00:00'];
case 'y': break;
$range = mktime(0, 0, 0, 1, 1, $date['year']); case 'year':
break; case 'y':
case 'yesterday': $range = ['this year 1/1', 'next year 1/1'];
$range = ['yesterday', 'today']; break;
break; case 'yesterday':
case 'last week': $range = ['yesterday', 'today'];
$range = ['last week 00:00:00', 'this week 00:00:00']; break;
break; case 'last week':
case 'last month': $range = ['last week 00:00:00', 'this week 00:00:00'];
$range = [date('y-m-01', strtotime('-1 month')), mktime(0, 0, 0, $date['mon'], 1, $date['year'])]; break;
break; case 'last month':
case 'last year': $range = ['first Day of last month 00:00:00', 'first Day of this month 00:00:00'];
$range = [mktime(0, 0, 0, 1, 1, $date['year'] - 1), mktime(0, 0, 0, 1, 1, $date['year'])]; break;
break; case 'last year':
default: $range = ['last year 1/1', 'this year 1/1'];
$range = $op; break;
default:
$range = $op;
}
} }
$op = is_array($range) ? 'between' : '>'; $op = is_array($range) ? 'between' : '>';
} }