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 相关文章推荐
ftp类(example.php)
Oct 09 PHP
PHP文本数据库的搜索方法
Oct 09 PHP
php顺序查找和二分查找示例
Mar 27 PHP
PHP中设置一个严格30分钟过期Session面试题的4种答案
Jul 30 PHP
使用PHP和JavaScript判断请求是否来自微信内浏览器
Aug 18 PHP
给WordPress的编辑后台添加提示框的代码实例分享
Dec 25 PHP
PHP中substr_count()函数获取子字符串出现次数的方法
Jan 07 PHP
ThinkPHP中order()使用方法详解
Apr 19 PHP
学习PHP的数组总结【经验】
May 05 PHP
图文详解phpstorm配置Xdebug进行调试PHP教程
Jun 13 PHP
PHP中的浅复制与深复制的实例详解
Oct 26 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
Apr 04 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
Dedecms常用函数解析
2008/02/01 PHP
中英文字符串翻转函数
2008/12/09 PHP
php 仿Comsenz安装效果代码打包提供下载
2010/05/09 PHP
PHP中函数rand和mt_rand的区别比较
2012/12/26 PHP
PHP Mysqli 常用代码集合
2016/11/12 PHP
PHP接口继承及接口多继承原理与实现方法详解
2017/10/18 PHP
Mac系统下安装PHP Xdebug
2018/03/30 PHP
在VS2008中使用jQuery智能感应的方法
2010/12/30 Javascript
Google的跟踪代码 动态加载js代码方法应用
2012/11/12 Javascript
jQuery获取页面元素绝对与相对位置的方法
2015/06/10 Javascript
Bootstrap入门书籍之(一)排版
2016/02/17 Javascript
用原生JS对AJAX做简单封装的实例代码
2016/07/13 Javascript
JavaScript中windows.open()、windows.close()方法详解
2016/07/28 Javascript
AngularJS入门教程之路由与多视图详解
2016/08/19 Javascript
jquery对table做排序操作的实例演示
2017/08/10 jQuery
jQuery实现经典的网页3D轮播图封装功能【附源码下载】
2019/02/15 jQuery
点击按钮弹出模态框的一系列操作代码实例
2019/03/29 Javascript
利用webpack理解CommonJS和ES Modules的差异区别
2020/06/16 Javascript
Python学习笔记(一)(基础入门之环境搭建)
2014/06/05 Python
Python利用ansible分发处理任务
2015/08/04 Python
详细介绍Python的鸭子类型
2016/09/12 Python
Python+MongoDB自增键值的简单实现
2016/11/04 Python
python中将正则过滤的内容输出写入到文件中的实例
2018/10/21 Python
django-filter和普通查询的例子
2019/08/12 Python
python获取linux系统信息的三种方法
2020/10/14 Python
python 实现一个简单的线性回归案例
2020/12/17 Python
美国领先的医疗警报服务:Philips Lifeline
2018/03/12 全球购物
阿根廷票务网站:StubHub阿根廷
2018/04/13 全球购物
德国综合购物网站:OTTO
2018/11/13 全球购物
精彩的演讲稿开头
2014/05/08 职场文书
2014年企业工会工作总结
2014/11/12 职场文书
街道党风廉政建设调研报告
2015/01/01 职场文书
员工家属慰问信
2015/03/24 职场文书
JavaScript中isPrototypeOf函数
2021/11/07 Javascript
Pygame如何使用精灵和碰撞检测
2021/11/17 Python
Python编程中内置的NotImplemented类型的用法
2022/03/23 Python