Symfony2针对输入时间进行查询的方法分析


Posted in PHP onJune 28, 2017

本文实例讲述了Symfony2针对输入时间进行查询的方法。分享给大家供大家参考,具体如下:

一般情况下:前端输入一个时间,我们一般是先将时间修改成一个时间戳

strtotime — 将任何英文文本的日期时间描述解析为 Unix 时间戳

例如:

$startTimestamp = strtotime($startDate);
$endTimestamp = strtotime($endDate);

然后:如果只是时间,为防止别人传的时间是造假,需要将时间都修改成Y-m-d的形式

$start = date('Y-m-d 00:00:00', $startTimestamp);
$end = date('Y-m-d 23:59:59', $endTimestamp);

1. 在MySQL中的使用

if(empty($startDate)) {
  throw new \Exception('起始时间不为空', BaseException::ERROR_CODE_ILLEGAL_PARAMETER);
}
if (empty($endDate)) {
  $endDate = $startDate;
}
$startTimestamp = strtotime($startDate);
$endTimestamp = strtotime($endDate);
if ($startTimestamp > $endTimestamp) {
  throw new \Exception('时间参数错误', BaseException::ERROR_CODE_ILLEGAL_PARAMETER);
}
if ($status == InventoryOrder::STATUS_SUBMITTED) {
  $index = 'i.submitTime';
} else if ($status == InventoryOrder::STATUS_UNSUBMITTED) {
  $index = 'i.createTime';
} else if (empty($status)) {
  $index = 'i.createTime';
} else {
  throw new \Exception('时间格式不正确', BaseException::ERROR_CODE_ILLEGAL_PARAMETER);
}
$sql = 'SELECT i FROM AppBundle:InventoryOrder i WHERE ';
$sql .= $index;
$sql .= ' BETWEEN :startDate AND :endDate ';
$start = date('Y-m-d 00:00:00', $startTimestamp);
$end = date('Y-m-d 23:59:59', $endTimestamp);
$params['endDate'] = $end;
$params['startDate'] = $start;
if (!empty($status)) {
  $sql .= ' AND i.status = :status';
  $params['status'] = $status;
}
$sql .=' ORDER By i.createTime DESC';
$query = $this->entityManager->createQuery($sql);
$orderList = $query->setParameters($params)->getResult();

2. 在mongodb中的时间的输入和查询列子

在这里面其实有两个坑:

@ ->field('submit_time')->gt(new \DateTime($start))
->field('submit_time')->lt(new \DateTime($end))

这里面,对于时间的查询,大于和小于,一定要传一个对象。

$query->field('status')->equals($status);

这里面,在mongodb里面不会默认帮你识别这是一个int型,是什么类型,必须手动的传入。

$data = array();
if (!isset($startDate)) {
  throw new \Exception("参数不正确", BaseException::ERROR_CODE_ILLEGAL_PARAMETER);
}
if (empty($endDate)) {
  $endDate = $startDate;
}
$startTimestamp = strtotime($startDate);
$endTimestamp = strtotime($endDate);
if ($startTimestamp > $endTimestamp) {
  throw new \Exception("参数不正确", BaseException::ERROR_CODE_ILLEGAL_PARAMETER);
}
$start = date('Y-m-d 00:00:00', $startTimestamp);
$end = date('Y-m-d 23:59:59', $endTimestamp);
$scanner = Order::FROM_TYPE_SCANNER;
$query = $this->documentManager
  ->createQueryBuilder('AppBundle:Order')
  ->field('submit_time')->gt(new \DateTime($start))
  ->field('submit_time')->lt(new \DateTime($end))
  ->field('from_type')->equals("$scanner");
if (!empty($status) && in_array($status, array(Order::STATUS_CANCELLED, Order::STATUS_SUBMITTED))) {
  $status = $status + 0;
  $query->field('status')->equals($status);
} else if (empty($status)) {
  $status = Order::STATUS_SUBMITTED + 0;
  $query->field('status')->equals($status);
} else {
  throw new \Exception("参数不正确", BaseException::ERROR_CODE_ILLEGAL_PARAMETER);
}
$orderList = $query->sort('create_time', 'DESC')
  ->getQuery()
  ->execute();

希望本文所述对大家基于Symfony2框架的PHP程序设计有所帮助。

PHP 相关文章推荐
php 常用类汇总 推荐收藏
May 13 PHP
php 的加密函数 md5,crypt,base64_encode 等使用介绍
Apr 09 PHP
探讨方法的重写(覆载)详解
Jun 08 PHP
使用PHP实现蜘蛛访问日志统计
Jul 05 PHP
PHP资源管理框架Assetic简介
Jun 12 PHP
PHP生成不重复标识符的方法
Nov 21 PHP
php实现redis数据库指定库号迁移的方法
Jan 14 PHP
Zend Framework教程之Bootstrap类用法概述
Mar 14 PHP
PHP版本的选择5.2.17 5.3.27 5.3.28 5.4 5.5兼容性问题分析
Apr 04 PHP
详解PHP中的 input属性(隐藏 只读 限制)
Aug 14 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
Jun 13 PHP
基于PHP实现用户在线状态检测
Nov 10 PHP
Symfony查询方法实例小结
Jun 28 #PHP
关于PHP转换超过2038年日期出错的问题解决
Jun 28 #PHP
YII2自动登录Cookie总是失效的解决方法
Jun 28 #PHP
php的常量和变量实例详解
Jun 27 #PHP
Zend Framework框架中实现Ajax的方法示例
Jun 27 #PHP
PHP用continue跳过本次循环中剩余代码的注意点
Jun 27 #PHP
PHP API接口必备之输出json格式数据示例代码
Jun 27 #PHP
You might like
PHP 字符串 小常识
2009/06/05 PHP
php查看请求头信息获取远程图片大小的方法分享
2013/12/25 PHP
php object转数组示例
2014/01/15 PHP
PHP输出一个等腰三角形的方法
2015/05/12 PHP
php使用str_replace替换多维数组的实现方法分析
2017/06/15 PHP
PHP网页安全认证的实例详解
2017/09/28 PHP
从JQuery源码分析JavaScript函数的apply方法与call方法
2014/09/25 Javascript
Js可拖拽放大的层拖动特效实现方法
2015/02/25 Javascript
JavaScript实现的Tween算法及缓冲特效实例代码
2015/11/03 Javascript
js调出上下文菜单的实例
2015/12/17 Javascript
纯js实现手风琴效果
2020/04/17 Javascript
vue 组件 全局注册和局部注册的实现
2018/02/28 Javascript
详解vue 数据传递的方法
2018/04/19 Javascript
对vue中v-on绑定自定事件的实例讲解
2018/09/06 Javascript
详解搭建es6+devServer简单开发环境
2018/09/25 Javascript
JavaScript代码异常监控实现过程详解
2020/02/17 Javascript
微信小程序去除左上角返回键的实现方法
2020/03/06 Javascript
JavaScript碰撞检测原理及其实现代码
2020/03/12 Javascript
echarts饼图各个板块之间的空隙如何实现
2020/12/01 Javascript
使用FastCGI部署Python的Django应用的教程
2015/07/22 Python
python更新列表的方法
2015/07/28 Python
Python类属性的延迟计算
2016/10/22 Python
selenium+python自动化测试之页面元素定位
2019/01/23 Python
python实现Excel文件转换为TXT文件
2019/04/28 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
2019/09/17 Python
如何使用Python抓取网页tag操作
2020/02/14 Python
python3.6环境下安装freetype库和基本使用方法(推荐)
2020/05/10 Python
使用canvas压缩图片大小的方法示例
2019/08/02 HTML / CSS
英国网上香水店:Fragrance Direct
2016/07/20 全球购物
Orvis官网:自1856年以来,优质服装、飞钓装备等
2018/12/17 全球购物
澳大利亚最便宜的网上药房:Chemist Warehouse
2020/01/30 全球购物
《雾凇》教学反思
2014/02/17 职场文书
财政专业求职信范文
2014/02/19 职场文书
捐献物资倡议书范文
2014/05/19 职场文书
党员承诺践诺书
2014/05/20 职场文书
辩论赛新闻稿
2015/07/17 职场文书