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 和 MySQL 基础教程(一)
Oct 09 PHP
PHP原生模板引擎 最简单的模板引擎
Apr 25 PHP
php cli模式学习(PHP命令行模式)
Jun 03 PHP
PHP常用的缓存技术汇总
May 05 PHP
让codeigniter与swfupload整合的最佳解决方案
Jun 12 PHP
php的XML文件解释类应用实例
Sep 22 PHP
各种快递查询--Api接口
Apr 26 PHP
PHP开发制作一个简单的活动日程表Calendar
Jun 20 PHP
php版微信小店调用api示例代码
Nov 12 PHP
PHP实现根据密码长度显示安全条
Jul 04 PHP
thinkphp5.0整合phpsocketio完整攻略(绕坑)
Oct 12 PHP
PHP dirname功能及原理实例解析
Oct 28 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生成图片验证码的方法
2016/04/15 PHP
JQuery扩展插件Validate 1 基本使用方法并打包下载
2011/09/05 Javascript
利用毫秒减值计算时长的js代码
2013/09/22 Javascript
jQuery判断复选框是否勾选的原理及示例
2014/05/21 Javascript
js实现时间显示几天前、几小时前或者几分钟前的方法集锦
2015/05/29 Javascript
Javascript对象Clone实例分析
2015/06/09 Javascript
基于JavaScript实现仿京东图片轮播效果
2015/11/06 Javascript
jquery实现触发时更新下拉列表内容的方法
2015/12/02 Javascript
javascript对象的相关操作小结
2016/05/16 Javascript
js实现对table的增加行和删除行的操作方法
2016/10/13 Javascript
JavaScript获取select中text值的方法
2017/02/13 Javascript
原生js编写2048小游戏
2017/03/17 Javascript
详解基于webpack&gettext的前端多语言方案
2019/01/29 Javascript
jQuery事件委托代码实践详解
2019/06/21 jQuery
mui js控制开关状态、修改switch开关的值方法
2019/09/03 Javascript
javascript canvas API内容整理
2020/02/16 Javascript
使用vue实现通过变量动态拼接url
2020/07/22 Javascript
python通过ElementTree操作XML获取结点读取属性美化XML
2013/12/02 Python
python获取一组汉字拼音首字母的方法
2015/07/01 Python
python爬取拉勾网职位数据的方法
2018/01/24 Python
python 进程间数据共享multiProcess.Manger实现解析
2019/09/23 Python
Python实现密钥密码(加解密)实例详解
2020/04/26 Python
Django 设置admin后台表和App(应用)为中文名的操作方法
2020/05/10 Python
Python如何向SQLServer存储二进制图片
2020/06/08 Python
在vscode中启动conda虚拟环境的思路详解
2020/12/25 Python
html5 Canvas画图教程(10)—把面拆成线条模拟出圆角矩形
2013/01/09 HTML / CSS
HTML5 3D衣服摇摆动画特效
2016/03/17 HTML / CSS
Skip Hop官网:好莱坞宝宝挚爱品牌
2018/06/17 全球购物
马来西亚户外装备商店:PTT Outdoor
2019/07/13 全球购物
网络安全方面的面试题
2015/11/04 面试题
促销活动总结
2014/04/28 职场文书
企业文化理念标语
2014/06/10 职场文书
基层党建工作汇报材料
2014/08/15 职场文书
关于长城的导游词
2015/01/30 职场文书
CocosCreator如何实现划过的位置显示纹理
2021/04/14 Javascript
Python scrapy爬取起点中文网小说榜单
2021/06/13 Python