public static function argDateQuery(Query $query, $value, &$q)
{
$query->bool(function (Query $query) use($value, $q) {
foreach ($value as $dq) {
$column = !empty($dq['column']) ? $dq['column'] : 'post_date';
$inclusive = !empty($dq['inclusive']);
foreach ($dq as $key => $value) {
switch ($key) {
case 'before':
$date = static::buildDatetime($value, $inclusive);
$comparator = 'lt';
if ($inclusive) {
$comparator .= 'e';
}
$query->where($column, $comparator, $date);
break;
case 'after':
$date = static::buildDatetime($value, !$inclusive);
$comparator = 'gt';
if ($inclusive) {
$comparator .= 'e';
}
$query->where($column, $comparator, $date);
break;
case 'week':
case 'w':
$query->where($column . '_object.week', $value);
break;
case 'year':
case 'month':
case 'dayofyear':
case 'day':
case 'dayofweek':
case 'dayofweek_iso':
case 'hour':
case 'minute':
case 'second':
$query->where($column . '_object.' . $key, $value);
break;
}
}
}
}, !empty($value['relation']) ? $value['relation'] : 'and');
}