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 相关文章推荐
在Windows版的PHP中使用ADO
Oct 09 PHP
Dedecms V3.1 生成HTML速度的优化办法
Mar 18 PHP
php gd2 上传图片/文字水印/图片水印/等比例缩略图/实现代码
May 15 PHP
php指定函数参数默认值示例代码
Dec 04 PHP
部署PHP项目应该注意的几点事项分享
Dec 20 PHP
解决Codeigniter不能上传rar和zip压缩包问题
Mar 07 PHP
PHP数组遍历知识汇总(包含遍历方法、数组指针操作函数、数组遍历测速)
Jul 05 PHP
常见的四种POST 提交数据方式(小总结)
Oct 08 PHP
ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
Feb 15 PHP
php使用escapeshellarg时中文被过滤的解决方法
Jul 10 PHP
php基于dom实现的图书xml格式数据示例
Feb 03 PHP
Yii2表单事件之Ajax提交实现方法
May 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
使用PHP模拟HTTP认证
2006/10/09 PHP
php foreach循环中使用引用的问题
2013/11/06 PHP
php提交post数组参数实例分析
2015/12/17 PHP
Yii2下点击验证码的切换实例代码
2017/03/14 PHP
Prototype 学习 工具函数学习($w,$F方法)
2009/07/12 Javascript
ExtJS Store的数据访问与更新问题
2010/04/28 Javascript
JS+css 图片自动缩放自适应大小
2013/08/08 Javascript
web css实现整站样式互相切换
2013/10/29 Javascript
JavaScript实现存储HTML字符串示例
2014/04/21 Javascript
仿百度联盟对联广告实现代码
2014/08/30 Javascript
JavaScript学习笔记之Function对象
2015/01/22 Javascript
JS实现点击按钮控制Div变宽、增高及调整背景色的方法
2015/08/05 Javascript
javascript 中设置window.location.href跳转无效问题解决办法
2017/02/09 Javascript
JavaScript 字符串数字左补位,右补位,取固定长度,截位扩展函数代码
2017/03/25 Javascript
Express + Session 实现登录验证功能
2017/09/08 Javascript
element 结合vue 在表单验证时有值却提示错误的解决办法
2018/01/22 Javascript
AngularJS 监听变量变化的实现方法
2018/10/09 Javascript
微信小程序使用echarts获取数据并生成折线图
2019/10/16 Javascript
iSlider手机端图片滑动切换插件使用详解
2019/12/24 Javascript
通过实例解析JavaScript常用排序算法
2020/09/02 Javascript
VUE项目实现主题切换的多种方法
2020/11/26 Vue.js
[50:48]LGD vs CHAOS 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
[43:43]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第三场 11.29
2020/12/02 DOTA
Python实现截屏的函数
2015/07/26 Python
selenium使用chrome浏览器测试(附chromedriver与chrome的对应关系表)
2018/11/29 Python
Python版名片管理系统
2018/11/30 Python
python for循环remove同一个list过程解析
2019/08/14 Python
pytorch+lstm实现的pos示例
2020/01/14 Python
Keras中 ImageDataGenerator函数的参数用法
2020/07/03 Python
浅析Python打包时包含静态文件处理方法
2021/01/15 Python
详解WebSocket跨域问题解决
2018/08/06 HTML / CSS
瀑布模型都有哪些优缺点
2014/06/23 面试题
护士毕业自我鉴定
2014/02/07 职场文书
母亲节感恩寄语
2014/02/21 职场文书
2015年办公室工作总结范文
2015/03/31 职场文书
商场圣诞节活动总结
2015/05/06 职场文书