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下PHP5和Apache的安装与配置
Sep 05 PHP
计算2000年01月01日起到指定日的天数
Oct 09 PHP
php实现的在线人员函数库
Apr 09 PHP
php 数据库字段复用的基本原理与示例
Jul 22 PHP
thinkphp中连接oracle时封装方法无法用的解决办法
Jun 17 PHP
php sybase_fetch_array使用方法
Apr 15 PHP
PHP数据库万能引擎类adodb配置使用以及实例集锦
Jun 12 PHP
php array_slice 取出数组中的一段序列实例
Nov 04 PHP
PHP实现微信图片上传到服务器的方法示例
Jun 29 PHP
解决laravel查询构造器中的别名问题
Oct 17 PHP
laravel 解决多库下的DB::transaction()事务失效问题
Oct 21 PHP
YII2框架中日志的配置与使用方法实例分析
Mar 18 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 IP转换整形(ip2long)的详解
2013/06/06 PHP
php微信开发之百度天气预报
2016/11/18 PHP
Yii框架扩展CGridView增加导出CSV功能的方法
2017/05/24 PHP
PHP实现生成推广海报的方法详解
2018/03/14 PHP
删除javascript中注释语句的正则表达式
2014/06/11 Javascript
js光标定位文本框回车表单提交问题的解决方法
2015/05/11 Javascript
利用yarn实现一个webpack+react种子
2016/10/25 Javascript
jQuery展示表格点击变色、全选、删除
2017/01/05 Javascript
vue如何通过id从列表页跳转到对应的详情页
2018/05/01 Javascript
NodeJS 实现多语言的示例代码
2018/09/11 NodeJs
提升node.js中使用redis的性能遇到的问题及解决方法
2018/10/30 Javascript
vue中可编辑树状表格的实现代码
2020/10/31 Javascript
python队列通信:rabbitMQ的使用(实例讲解)
2017/12/22 Python
详解Python3除法之真除法、截断除法和下取整对比
2019/05/23 Python
pymysql 开启调试模式的实现
2019/09/24 Python
Python tensorflow实现mnist手写数字识别示例【非卷积与卷积实现】
2019/12/19 Python
python3下pygame如何实现显示中文
2020/01/11 Python
Python实现随机爬山算法
2021/01/29 Python
html5中如何将图片的绝对路径转换成文件对象
2018/01/11 HTML / CSS
html5 canvas-1.canvas介绍(hello canvas)
2013/01/07 HTML / CSS
HTML5 History API 实现无刷新跳转
2016/01/11 HTML / CSS
英国排名第一的LED灯泡网站:LED Bulbs
2019/09/03 全球购物
抽样调查项目计划书
2014/04/24 职场文书
计生工作先进事迹
2014/08/15 职场文书
2014离婚协议书范文两篇
2014/09/15 职场文书
班子成员四风问题自我剖析材料
2014/09/29 职场文书
幼儿园感恩节活动方案2014
2014/10/11 职场文书
2014年四风个人对照检查及整改措施
2014/10/28 职场文书
2014年机关党委工作总结
2014/12/11 职场文书
2015年党风廉政建设工作总结
2015/04/09 职场文书
新生开学寄语大全
2015/05/28 职场文书
商务英语邮件开头问候语
2015/11/10 职场文书
用Python的绘图库(matplotlib)绘制小波能量谱
2021/04/17 Python
Python3接口性能测试实例代码
2021/06/20 Python
Python Pandas读取Excel日期数据的异常处理方法
2022/02/28 Python
Vue组件化(ref,props, mixin,.插件)详解
2022/05/15 Vue.js