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的QRcode类与大家分享
Nov 13 PHP
php explode函数实例代码
Feb 27 PHP
php中计算程序运行时间的类代码
Nov 03 PHP
file_get_contents获取不到网页内容的解决方法
Mar 07 PHP
thinkphp实现面包屑导航(当前位置)例子分享
May 10 PHP
PHP分页类集锦
Nov 18 PHP
PHP中文字符串截断无乱码解决方法
Oct 10 PHP
php实现有序数组打印或排序的方法【附Python、C及Go语言实现代码】
Nov 10 PHP
老生常谈文本文件和二进制文件的区别
Feb 27 PHP
php文件包含目录配置open_basedir的使用与性能详解
Apr 03 PHP
PHP面向对象之工作单元(实例讲解)
Jun 26 PHP
thinkphp框架表单数组实现图片批量上传功能示例
Apr 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 zend解密软件绿色版测试可用
2008/04/14 PHP
PHP安全配置详细说明
2011/09/26 PHP
php统计数组元素个数的方法
2015/07/02 PHP
PHP中的Session对象如何使用
2015/09/25 PHP
CI框架实现cookie登陆的方法详解
2016/05/18 PHP
PHP模版引擎原理、定义与用法实例
2019/03/29 PHP
IE8 浏览器Cookie的处理
2009/01/31 Javascript
jQuery Validation插件remote验证方式的Bug解决
2010/07/01 Javascript
两种常用的javascript数组去重方法思路及代码
2013/03/26 Javascript
深入理解JavaScript编程中的原型概念
2015/06/25 Javascript
jQuery实现的漂亮表单效果代码
2015/08/18 Javascript
JavaScript代码性能优化总结(推荐)
2016/05/16 Javascript
jQuery on()方法绑定动态元素的点击事件无响应的解决办法
2016/07/07 Javascript
详谈jQuery中使用attr(), prop(), val()获取value的异同
2017/04/25 jQuery
vue中对象数组去重的实现
2020/02/06 Javascript
js实现鼠标点击飘爱心效果
2020/08/19 Javascript
解决vant的Toast组件时提示not defined的问题
2020/11/11 Javascript
python字典序问题实例
2014/09/26 Python
Tornado协程在python2.7如何返回值(实现方法)
2017/06/22 Python
python 利用浏览器 Cookie 模拟登录的用户访问知乎的方法
2019/07/11 Python
Python lxml模块的基本使用方法分析
2019/12/21 Python
python实现人机五子棋
2020/03/25 Python
Python中logging日志的四个等级和使用
2020/11/17 Python
纯CSS3实现图片无间断轮播效果
2016/08/25 HTML / CSS
html5 Canvas画图教程(1)—画图的基本常识
2013/01/09 HTML / CSS
工作总结与自我评价
2014/09/18 职场文书
单位租房协议范本
2014/12/03 职场文书
六年级学生评语大全
2014/12/26 职场文书
2015年保险公司工作总结
2015/04/24 职场文书
2015年乡镇卫生院妇幼保健工作总结
2015/05/19 职场文书
2015年体育教学工作总结
2015/05/20 职场文书
2016教师廉洁从教心得体会
2016/01/13 职场文书
各国货币符号大全
2022/02/17 杂记
nginx刷新页面出现404解决方案(亲测有效)
2022/03/18 Servers
AJAX引擎原理以及XmlHttpRequest对象的axios、fetch区别详解
2022/04/09 Javascript
Redis特殊数据类型HyperLogLog基数统计算法讲解
2022/06/01 Redis