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 反向排序和随机排序代码
Jun 30 PHP
用PHP实现Ftp用户的在线管理
Feb 16 PHP
php 操作调试的方法
Jul 12 PHP
php调用shell的方法
Nov 05 PHP
PHP文件锁函数flock()详细介绍
Nov 18 PHP
php实现监控varnish缓存服务器的状态
Dec 30 PHP
php文件上传你必须知道的几点
Oct 20 PHP
PHP基于单例模式实现的mysql类
Jan 09 PHP
thinkPHP简单实现多个子查询语句的方法
Dec 05 PHP
PHP常见字符串处理函数用法示例【转换,转义,截取,比较,查找,反转,切割】
Dec 24 PHP
PHP使用mysqli操作MySQL数据库的简单方法
Feb 04 PHP
PHP数字金额转换成中文大写显示
Jan 05 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
在Win7 中为php扩展配置Xcache
2014/10/08 PHP
PHP中Socket连接及读写数据超时问题分析
2016/07/19 PHP
PHP 以POST方式提交XML、获取XML,解析XML详解及实例
2016/10/26 PHP
PHP时间处理类操作示例
2018/09/05 PHP
Jquery作者John Resig自己封装的javascript 常用函数
2009/11/09 Javascript
Visual Studio中的jQuery智能提示设置方法
2010/03/27 Javascript
Js四则运算函数代码
2012/07/21 Javascript
JS实现鼠标箭头变成一个燃烧烛光效果的方法
2015/02/28 Javascript
JavaScript+html5 canvas制作的圆中圆效果实例
2016/01/27 Javascript
JavaScript的MVVM库Vue.js入门学习笔记
2016/05/03 Javascript
Radio 单选JS动态添加的选项onchange事件无效的解决方法
2016/12/12 Javascript
parabola.js抛物线与加入购物车效果的示例代码
2017/10/25 Javascript
JS实现520 表白简单代码
2018/05/21 Javascript
微信小程序分享功能之按钮button 边框隐藏和点击隐藏
2018/06/14 Javascript
mpvue中使用flyjs全局拦截的实现代码
2018/09/13 Javascript
vue 指令之气泡提示效果的实现代码
2018/10/18 Javascript
Vue中axios的封装(报错、鉴权、跳转、拦截、提示)
2019/08/20 Javascript
Vue 实现输入框新增搜索历史记录功能
2019/10/15 Javascript
node.js制作一个简单的登录拦截器
2020/02/10 Javascript
多页vue应用的单页面打包方法(内含打包模式的应用)
2020/06/11 Javascript
Python用for循环实现九九乘法表
2018/05/31 Python
详解Python 协程的详细用法使用和例子
2018/06/15 Python
Pycharm 文件更改目录后,执行路径未更新的解决方法
2019/07/19 Python
django rest framework vue 实现用户登录详解
2019/07/29 Python
pytorch对梯度进行可视化进行梯度检查教程
2020/02/04 Python
python使用gdal对shp读取,新建和更新的实例
2020/03/10 Python
使用tensorflow进行音乐类型的分类
2020/08/14 Python
Anaconda的安装与虚拟环境建立
2020/11/18 Python
Pycharm Plugins加载失败问题解决方案
2020/11/28 Python
英国设计的甲板鞋和船鞋:Chatham
2018/12/06 全球购物
英语自荐信范文
2013/12/11 职场文书
2014七年级班主任工作总结
2014/12/05 职场文书
拾金不昧表扬稿
2015/01/16 职场文书
2015大学迎新晚会主持词
2015/07/16 职场文书
三好学生评选事迹材料(2016精选版)
2016/02/25 职场文书
如何解决.cuda()加载用时很长的问题
2021/05/24 Python