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+AJAX实现无刷新注册(带用户名实时检测)
Dec 02 PHP
dedecms后台验证码总提示错误的解决方法
Mar 21 PHP
PHP中PDO基础教程 入门级
Sep 04 PHP
PHP的preg_match匹配字符串长度问题解决方法
May 03 PHP
PHP使用memcache缓存技术提高响应速度的方法
Dec 26 PHP
php结合curl实现多线程抓取
Jul 09 PHP
php getcwd与dirname(__FILE__)区别详解
Sep 24 PHP
PHP不使用递归的无限级分类简单实例
Nov 05 PHP
php使用curl实现ftp文件下载功能
May 16 PHP
Thinkphp5.0框架的Db操作实例分析【连接、增删改查、链式操作等】
Oct 11 PHP
为你的 Laravel 验证器加上多验证场景的实现
Apr 07 PHP
phpmyadmin在宝塔面板里进不去的解决方案
Jul 06 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递归实现无限分类生成下拉列表的函数
2010/08/08 PHP
PHP模块 Memcached功能多于Memcache
2011/06/14 PHP
Android AsyncTack 异步任务实例详解
2016/11/02 PHP
php-fpm添加service服务的例子
2018/04/27 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
2020/04/04 PHP
javascript各种复制代码收集
2008/09/20 Javascript
Jquery阻止事件冒泡 event.stopPropagation
2011/12/11 Javascript
在JavaScript的jQuery库中操作AJAX的方法讲解
2015/08/15 Javascript
js实现密码强度检测【附示例】
2016/03/30 Javascript
Backbone.js框架中Model与Collection的使用实例
2016/05/07 Javascript
基于jQuery实现淡入淡出效果轮播图
2020/07/31 Javascript
浅谈jquery页面初始化的4种方式
2016/11/27 Javascript
Jquery Easyui菜单组件Menu使用详解(15)
2016/12/18 Javascript
javascript replace()第二个参数为函数时的参数用法
2016/12/26 Javascript
JavaScript利用闭包实现模块化
2017/01/13 Javascript
AngularJS ng-repeat指令中使用track by子语句解决重复数据遍历错误问题
2017/01/21 Javascript
AngularJs表单校验功能实例代码
2017/02/09 Javascript
Vue CLI3创建项目部署到Tomcat 使用ngrok映射到外网
2019/05/16 Javascript
JavaScript学习教程之cookie与webstorage
2019/06/23 Javascript
python将MongoDB里的ObjectId转换为时间戳的方法
2015/03/13 Python
Python中使用PyQt把网页转换成PDF操作代码实例
2015/04/23 Python
python操作xlsx文件的包openpyxl实例
2018/05/03 Python
Python类装饰器实现方法详解
2018/12/21 Python
Django 开发环境配置过程详解
2019/07/18 Python
基于Python 中函数的 收集参数 机制
2019/12/21 Python
非常漂亮的CSS3百叶窗焦点图动画
2016/02/24 HTML / CSS
HTML5实现音频和视频嵌入的方法
2018/08/22 HTML / CSS
error和exception有什么区别
2012/10/02 面试题
介绍一下Java的事务处理
2012/12/07 面试题
喷漆工的岗位职责
2014/03/17 职场文书
纠纷协议书
2014/04/16 职场文书
安全生产知识竞赛活动总结
2014/07/07 职场文书
励志演讲稿200字
2014/08/21 职场文书
小学音乐教师个人工作总结
2015/02/05 职场文书
毕业生个人总结
2015/02/28 职场文书
子女赡养老人协议书
2016/03/23 职场文书