Symfony2针对输入时间进行查询的方法分析

2025-05-29 0 96

本文实例讲述了Symfony2针对输入时间进行查询的方法。分享给大家供大家参考,具体如下:

一般情况下:前端输入一个时间,我们一般是先将时间修改成一个时间

strtotime — 将任何英文文本的日期时间描述解析为 Unix 时间

例如:

?

1

2
$startTimestamp = strtotime($startDate);

$endTimestamp = strtotime($endDate);

然后:如果只是时间,为防止别人传的时间是造假,需要将时间都修改成Y-m-d的形式

?

1

2
$start = date('Y-m-d 00:00:00', $startTimestamp);

$end = date('Y-m-d 23:59:59', $endTimestamp);

1. 在MySQL中的使用

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34
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中的时间的输入和查询列子

在这里面其实有两个坑:

?

1

2
@ ->field('submit_time')->gt(new \\DateTime($start))

->field('submit_time')->lt(new \\DateTime($end))

这里面,对于时间查询,大于和小于,一定要传一个对象。

?

1
$query->field('status')->equals($status);

这里面,在mongodb里面不会默认帮你识别这是一个int型,是什么类型,必须手动的传入。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32
$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程序设计有所帮助。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 Symfony2针对输入时间进行查询的方法分析 https://www.kuaiidc.com/94040.html

相关文章

发表评论
暂无评论