单条知识点
组织unix时间戳区间查询的where条件语句2017-07-31 10:36:02
/**组织日期时间的区间的查询条件
 * @param $params
 * @param $field_prefix
 * @return string
 * 数组中必须包含 字段名前缀__begin 和 字段名前缀__end ,没有则返回'',字段名前缀是对于数组来说,组织where条件就是将$field_prefix当作字段名。
 */
function set_Date_Where($params,$field_prefix)
{
    if(empty($field_prefix))
        return '';
    else{
        if(!array_key_exists($field_prefix.'_begin',$params))
            return '';
        if(!array_key_exists($field_prefix.'_end',$params))
            return '';
    }
    $where=' ';
    /**判断start_time的条件**/
    if(!empty($params[$field_prefix.'_begin']) && !empty($params[$field_prefix.'_end'])) {
        //如果开始时间和结束时间都不空  $field_prefix.'
        if ($params[$field_prefix.'_begin'] == $params[$field_prefix.'_end'])
        {
            //但开始时间和结束时间相等,就查询当天的00:00:00到23:59:59
            $day = substr($params[$field_prefix.'_begin'],0,11);
            $where .= ' and '.$field_prefix.' between ' . strtotime($day.' 00:00:00') . ' and ' . strtotime($day.' 23:59:59');
        }
        elseif($_begin = strtotime($params[$field_prefix.'_begin']) > $_end = strtotime($params[$field_prefix.'_end']))
            //如果开始时间大于结束时间,默认调换过来
            $where .= ' and '.$field_prefix.' between ' . $_end . ' and ' . $_begin;
        else
            $where .= ' and '.$field_prefix.' between ' . strtotime($params[$field_prefix.'_begin']) . ' and ' . strtotime($params[$field_prefix.'_end'].' 23:59:59');
    }
    elseif(!empty($params[$field_prefix.'_begin']) && empty($params[$field_prefix.'_end']))
        //如果开始时间不为空,结束时间为空。查询开始时间为
        $where .= ' and '.$field_prefix.' >= '.strtotime(substr($params[$field_prefix.'_begin'],0,11).' 00:00:00');
    elseif(empty($params[$field_prefix.'_begin']) && !empty($params[$field_prefix.'_end']))
        //如果开始时间为空,结束时间不为空。查询结束时间之前
        $where .= ' and '.$field_prefix.' <= '.strtotime($params[$field_prefix.'_end'].' 23:59:59');
    else{
        $where = ' ';//都为空
    }
    return $where;
}