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冒泡排序算法代码详细解读
Jul 17 PHP
PHP 的异常处理、错误的抛出及回调函数等面向对象的错误处理方法
Dec 07 PHP
基于PHP array数组的教程详解
Jun 05 PHP
Session的工作机制详解和安全性问题(PHP实例讲解)
Apr 10 PHP
利用谷歌 Translate API制作自己的翻译脚本
Jun 04 PHP
ThinkPHP模板比较标签用法详解
Jun 30 PHP
十幅图告诉你什么是PHP引用
Feb 22 PHP
PHP获取数组的键与值方法小结
Jun 13 PHP
Laravel框架使用Redis的方法详解
May 30 PHP
php实现简单的守护进程创建、开启与关闭操作
Aug 13 PHP
YII2框架中日志的配置与使用方法实例分析
Mar 18 PHP
详解PHP服务器如何在有限的资源里最大提升并发能力
May 25 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生成短网址的3种方法代码实例
2014/07/08 PHP
php生成酷炫的四个字符验证码
2016/04/22 PHP
简短几句 通俗解释javascript的闭包
2011/01/17 Javascript
js异常捕获方法介绍
2013/04/10 Javascript
判断JS对象是否拥有某种属性的两种方式
2013/12/02 Javascript
js实现按钮颜色渐变动画效果
2015/08/20 Javascript
jQuery实现带延迟效果的滑动菜单代码
2015/09/02 Javascript
javascript匀速运动实现方法分析
2016/01/08 Javascript
jQuery实现根据生日计算年龄 星座 生肖
2016/11/23 Javascript
详解jquery validate实现表单验证 (正则表达式)
2017/01/18 Javascript
javascript中replace使用方法总结
2017/03/01 Javascript
vue实现app页面切换动画效果实例
2017/05/23 Javascript
jquery在vue脚手架中的使用方式示例
2017/08/29 jQuery
React中this丢失的四种解决方法
2019/03/12 Javascript
了解JavaScript表单操作和表单域
2019/05/27 Javascript
javascript面向对象三大特征之继承实例详解
2019/07/24 Javascript
JavaScript this在函数中的指向及实例详解
2019/10/14 Javascript
[00:33]DOTA2上海特级锦标赛 CDEC战队宣传片
2016/03/04 DOTA
[02:12]打造更好的电竞完美世界:完美盛典回顾篇
2018/12/19 DOTA
Python基于OpenCV实现视频的人脸检测
2018/01/23 Python
python RabbitMQ 使用详细介绍(小结)
2018/11/08 Python
Python文件如何引入?详解引入Python文件步骤
2018/12/10 Python
Python 下载及安装详细步骤
2019/11/04 Python
200行python代码实现贪吃蛇游戏
2020/04/24 Python
使用keras内置的模型进行图片预测实例
2020/06/17 Python
Python实例教程之检索输出月份日历表
2020/12/16 Python
美国著名手表网站:Timepiece
2017/11/15 全球购物
兰蔻英国官网:Lancome英国
2019/04/30 全球购物
俄罗斯宠物用品网上商店:ZooMag
2019/12/12 全球购物
Java面试题:说出如下代码的执行结果
2015/10/30 面试题
应届生人事助理求职信
2013/11/09 职场文书
建筑设计师岗位职责
2013/11/18 职场文书
公司联欢会策划方案
2014/05/19 职场文书
小学国庆节活动方案策划书
2014/09/16 职场文书
幼儿园大班个人总结
2015/02/28 职场文书
Jupyter Notebook 如何修改字体和大小以及更改字体样式
2021/06/03 Python