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 相关文章推荐
笑谈配置,使用Smarty技术
Jan 04 PHP
Discuz板块横排显示图片的实现方法
May 28 PHP
PHP简单系统查询模块代码打包下载
Jun 07 PHP
php 从数据库提取二进制图片的处理代码
Sep 09 PHP
PHP return语句的另一个作用
Jul 30 PHP
php cookie中点号(句号)自动转为下划线问题
Oct 21 PHP
PHP多线程之内部多线程实例分析
Mar 09 PHP
php遍历删除整个目录及文件的方法
Mar 13 PHP
php身份证号码检查类实例
Jun 18 PHP
浅谈php7的重大新特性
Oct 23 PHP
PHP用mysql_insert_id()函数获得刚插入数据或当前发布文章的ID
Nov 25 PHP
php中this关键字用法分析
Dec 07 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面向对象教程之自定义类
2014/06/10 PHP
php中文繁体和简体相互转换的方法
2015/03/21 PHP
PHP导出带样式的Excel示例代码
2016/08/28 PHP
javascript(js)的小数点乘法除法问题详解
2014/03/07 Javascript
js选项卡的实现方法
2015/02/09 Javascript
javascript+HTML5的Canvas实现Lab单车动画效果
2015/08/07 Javascript
Node.js静态文件服务器改进版
2016/01/10 Javascript
详解AngularJS中的http拦截
2016/02/09 Javascript
在JavaScript中模拟类(class)及类的继承关系
2016/05/20 Javascript
JS刷新父窗口的几种方式小结(推荐)
2016/11/09 Javascript
整理关于Bootstrap导航的慕课笔记
2017/03/29 Javascript
微信小程序表单验证插件WxValidate的二次封装功能(终极版)
2019/09/03 Javascript
[36:41]完美世界DOTA2联赛循环赛FTD vs Magma第一场 10月30日
2020/10/31 DOTA
把项目从Python2.x移植到Python3.x的经验总结
2015/04/20 Python
python制作websocket服务器实例分享
2016/11/20 Python
Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例
2017/08/21 Python
对python实时得到鼠标位置的示例讲解
2018/10/14 Python
Selenium定时刷新网页的实现代码
2018/10/31 Python
python的几种矩阵相乘的公式详解
2019/07/10 Python
python实现通过flask和前端进行数据收发
2019/08/22 Python
Python argparse模块应用实例解析
2019/11/15 Python
Django认证系统user对象实现过程解析
2020/03/02 Python
python3利用Axes3D库画3D模型图
2020/03/25 Python
Python数组拼接np.concatenate实现过程
2020/04/18 Python
Cpython解释器中的GIL全局解释器锁
2020/11/09 Python
socket.io 和canvas 实现的共享画板功能
2019/05/22 HTML / CSS
计算机软件个人的自荐信范文
2013/12/01 职场文书
小学教师国培感言
2014/02/08 职场文书
机关保密承诺书
2014/06/03 职场文书
班级出游活动计划书
2014/08/15 职场文书
批评与自我批评发言稿
2014/10/15 职场文书
无故旷工检讨书
2015/08/15 职场文书
药品销售员2015年终工作总结
2015/10/22 职场文书
JS监听Esc 键触发事键
2021/04/14 Javascript
小程序与后端Java接口交互实现HelloWorld入门
2021/07/09 Java/Android
利用Python多线程实现图片下载器
2022/03/25 Python