你好,我试图创建一个过滤器与日期时间,但当我试图使用日期时间,我有这个错误:异常:对bool调用成员函数format()
但没有时间,它工作正常。
下面是我的助手代码:
function to_sql_date($date, $datetime = false)
{
if ($date == '' || $date == null) {
return null;
}
$to_date = 'Y-m-d';
$from_format = get_current_date_format(true);
$date = hooks()->apply_filters('before_sql_date_format', $date, [
'from_format' => $from_format,
'is_datetime' => $datetime,
]);
if ($datetime == false) {
// Is already Y-m-d format?
if (preg_match('/^(\d{4})-(\d{1,2})-(\d{1,2})$/', $date)) {
return $date;
}
return hooks()->apply_filters(
'to_sql_date_formatted',
DateTime::createFromFormat($from_format, $date)->format($to_date)
);
}
if (strpos($date, ' ') === false) {
$date .= ' 00:00:00';
} else {
$hour12 = (get_option('time_format') == 24 ? false : true);
if ($hour12 == false) {
$_temp = explode(' ', $date);
$time = explode(':', $_temp[1]);
if (count($time) == 2) {
$date .= ':00';
}
} else {
$tmp = _simplify_date_fix($date, $from_format);
$time = date('G:i', strtotime($tmp));
$tmp = explode(' ', $tmp);
$date = $tmp[0] . ' ' . $time . ':00';
}
}
$date = _simplify_date_fix($date, $from_format);
$d = date('Y-m-d H:i:s', strtotime($date));
return hooks()->apply_filters('to_sql_date_formatted', $d);
}
我的控制器代码,用于获取具有日期范围的日期选择器的期间。我的日期格式为SQL中的DATETIME
private function get_where_report_period($field = 'date')
{
$months_report = $this->input->post('report_months');
$custom_date_select = '';
if ($months_report != '') {
if (is_numeric($months_report)) {
// Last month
if ($months_report == '1') {
$beginMonth = date('Y-m-01', strtotime('first day of last month'));
$endMonth = date('Y-m-t', strtotime('last day of last month'));
} else {
$months_report = (int) $months_report;
$months_report--;
$beginMonth = date('Y-m-01', strtotime("-$months_report MONTH"));
$endMonth = date('Y-m-t');
}
$custom_date_select = 'AND (' . $field . ' BETWEEN "' . $beginMonth . '" AND "' . $endMonth . '")';
} elseif ($months_report == 'this_month') {
$custom_date_select = 'AND (' . $field . ' BETWEEN "' . date('Y-m-01') . '" AND "' . date('Y-m-t') . '")';
} elseif ($months_report == 'this_year') {
$custom_date_select = 'AND (' . $field . ' BETWEEN "' .
date('Y-m-d', strtotime(date('Y-01-01'))) .
'" AND "' .
date('Y-m-d', strtotime(date('Y-12-31'))) . '")';
} elseif ($months_report == 'last_year') {
$custom_date_select = 'AND (' . $field . ' BETWEEN "' .
date('Y-m-d', strtotime(date(date('Y', strtotime('last year')) . '-01-01'))) .
'" AND "' .
date('Y-m-d', strtotime(date(date('Y', strtotime('last year')) . '-12-31'))) . '")';
} elseif ($months_report == 'custom') {
$from_date = to_sql_date($this->input->post('report_from'));
$to_date = to_sql_date($this->input->post('report_to'));
if ($from_date == $to_date) {
$custom_date_select = 'AND ' . $field . ' = "' . $this->db->escape_str($from_date) . '"';
} else {
$custom_date_select = 'AND (' . $field . ' BETWEEN "' . $this->db->escape_str($from_date) . '" AND "' . $this->db->escape_str($to_date) . '")';
}
}
}
return $custom_date_select;
}
1条答案
按热度按时间8yoxcaq71#
问题在于
尝试在它后面使用else