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实现图片简单上传
Oct 09 PHP
IIS+PHP+MySQL+Zend配置 (视频教程)
Dec 13 PHP
一些使用频率比较高的php函数
Oct 03 PHP
apache2.2.4+mysql5.0.77+php5.2.8安装精简
Apr 29 PHP
关于IIS php调用com组件的权限问题
Jan 11 PHP
解析php获取字符串的编码格式的方法(函数)
Jun 21 PHP
php中10个不同等级压缩优化图片操作示例
Nov 14 PHP
thinkPHP中volist标签用法示例
Dec 06 PHP
Laravel使用消息队列需要注意的一些问题
Dec 13 PHP
PHP生成指定范围内的N个不重复的随机数
Mar 18 PHP
PHP从零开始打造自己的MVC框架之入口文件实现方法详解
Jun 03 PHP
如何用PHP websocket实现网页实时聊天
May 26 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
要会喝咖啡也要会知道咖啡豆
2021/03/03 咖啡文化
php下实现农历日历的代码
2007/03/07 PHP
PHP中copy on write写时复制机制介绍
2014/05/13 PHP
PHP实现Javascript中的escape及unescape函数代码分享
2015/02/10 PHP
php检索或者复制远程文件的方法
2015/03/13 PHP
CI操作cookie的方法分析(基于helper类库)
2016/03/28 PHP
抛弃 PHP 代价太高
2016/04/26 PHP
Yii2中使用asset压缩js,css文件的方法
2016/11/24 PHP
ThinkPHP实现静态缓存和动态缓存示例代码
2017/05/02 PHP
基于jquery的实现简单的表格中增加或删除下一行
2010/08/01 Javascript
jquery 淡入淡出效果的简单实现
2014/02/07 Javascript
jQuery选择id属性带有点符号元素的方法
2015/03/17 Javascript
jQuery实现鼠标单击网页文字后在文本框显示的方法
2015/05/06 Javascript
windows下安装nodejs及框架express
2015/08/07 NodeJs
jQuery实现的Div窗口震动效果实例
2015/08/07 Javascript
基于JavaScript实现快速转换文本语言(繁体中文和简体中文)
2016/03/07 Javascript
JS原型链 详解及示例代码
2016/09/06 Javascript
vue-router 手势滑动触发返回功能
2018/09/30 Javascript
jQuery 选择方法及$(this)用法实例分析
2020/05/19 jQuery
[46:43]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第二局
2016/03/02 DOTA
[02:44]完美大师赛主赛事淘汰赛第二日观众采访
2017/11/24 DOTA
举例讲解Python中字典的合并值相加与异或对比
2016/06/04 Python
Python面向对象编程中关于类和方法的学习笔记
2016/06/30 Python
Python利用字典将两个通讯录文本合并为一个文本实例
2018/01/16 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
2018/07/26 Python
python中如何写类
2020/06/29 Python
Python类的继承super相关原理解析
2020/10/22 Python
使用CSS3来实现滚动视差效果的教程
2015/08/24 HTML / CSS
h5实现获取用户地理定位的实例代码
2017/07/17 HTML / CSS
DELPHI面试题研发笔试试卷
2015/11/08 面试题
关于幼儿的自我评价
2013/12/18 职场文书
我的兄弟姐妹观后感
2015/06/15 职场文书
2015年秋季小学开学典礼主持词
2015/07/16 职场文书
解决Mysql多行子查询的使用及空值问题
2022/01/22 MySQL
我们认为中短波广播场强仪的最佳组合
2022/04/05 无线电
Consul在linux环境的集群部署
2022/04/08 Servers