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 相关文章推荐
PHP4实际应用经验篇(9)
Oct 09 PHP
PHP经典的给图片加水印程序
Dec 06 PHP
PHP 根据IP地址控制访问的代码
Apr 22 PHP
将FCKeditor导入PHP+SMARTY的实现方法
Jan 15 PHP
PHP实现Javascript中的escape及unescape函数代码分享
Feb 10 PHP
基于OpenCart 开发支付宝,财付通,微信支付参数错误问题
Oct 01 PHP
CodeIgniter视图使用注意事项
Jan 20 PHP
PHP实现二维数组去重功能示例
Jan 12 PHP
php中请求url的五种方法总结
Jul 13 PHP
阿里云的WindowsServer2016上部署php+apache
Jul 17 PHP
用PHP的反射实现委托模式的讲解
Mar 22 PHP
php常用的工具开发整理
Sep 26 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数组合并array_merge()函数使用注意事项
2014/06/19 PHP
php代码检查代理ip的有效性
2016/08/19 PHP
PHP使用PDO抽象层获取查询结果的方法示例
2018/05/10 PHP
ThinkPHP5 验证器的具体使用
2018/05/31 PHP
PHP的垃圾回收机制代码实例讲解
2021/02/27 PHP
javascript 硬盘序列号+其它硬件信息
2008/12/23 Javascript
jquery简单实现带渐显效果的选项卡菜单代码
2015/09/01 Javascript
javascript ASCII和Hex互转的实现方法
2016/12/27 Javascript
bootstrap fileinput组件整合Springmvc上传图片到本地磁盘
2017/05/11 Javascript
JS+CSS实现网页加载中的动画效果
2017/10/27 Javascript
基于 D3.js 绘制动态进度条的实例详解
2018/02/26 Javascript
vue打包的时候自动将px转成rem的操作方法
2018/06/20 Javascript
Vue解析带html标签的字符串为dom的实例
2019/11/13 Javascript
create-react-app中添加less支持的实现
2019/11/15 Javascript
如何优雅地取消 JavaScript 异步任务
2020/03/22 Javascript
[01:16:13]DOTA2-DPC中国联赛 正赛 SAG vs Dragon BO3 第一场 2月22日
2021/03/11 DOTA
详解Python程序与服务器连接的WSGI接口
2015/04/29 Python
python递归查询菜单并转换成json实例
2017/03/27 Python
Sanic框架安装与简单入门示例
2018/07/16 Python
pycharm访问mysql数据库的方法步骤
2019/06/18 Python
centos 安装Python3 及对应的pip教程详解
2019/06/28 Python
python生成并处理uuid的实现方式
2020/03/03 Python
canvas实现滑动验证的实现示例
2020/08/11 HTML / CSS
前后端结合实现amazeUI分页效果
2020/08/21 HTML / CSS
ReVive利维肤美国官网:RéVive Skincare
2018/04/18 全球购物
英国马莎百货印度官网:Marks & Spencer印度
2020/10/08 全球购物
什么是Smart Navigation?
2016/07/03 面试题
Java基础类库面试题
2013/09/04 面试题
计算机维护专业推荐信
2014/02/27 职场文书
贷款担保申请书
2014/05/20 职场文书
厕所文明标语
2014/06/11 职场文书
英语自我介绍演讲稿
2014/09/01 职场文书
因公司原因离职的辞职信范文
2015/05/12 职场文书
工作汇报材料难写?方法都在这里了!
2019/07/01 职场文书
python获取淘宝服务器时间的代码示例
2021/04/22 Python
pytorch 两个GPU同时训练的解决方案
2021/06/01 Python