【问题标题】:How to get all data before seted date including hours in SQL如何在设定的日期之前获取所有数据,包括 SQL 中的小时数
【发布时间】:2018-05-11 16:46:38
【问题描述】:

我使用 DQL 在 PHP 中编写一些查询来获取数据库的数据,具体取决于下一个表单中设置的实体,问题是当我比较 2 个日期并且结果比设置的日期少一天时,因为第二个日期时间是固定在 00:00:00,结果比我输入的表格少了一天:

表单实体:

    User.php on line 7719:
array:5 [▼
  "dateFrom" => null
  "dateTo" => DateTime {#978 ▼
    +"date": "2017-11-21 00:00:00.000000"
    +"timezone_type": 3
    +"timezone": "UTC"
  }
  "name" => null
  "surname" => null
  "car" => null
]

代码示例:

if ($form->get('button')->isClicked()) {

   $entity = $form->getData();

   $query = $em->getRepository('AppBundle:User')->createQueryBuilder('u');

   if ($entity['dateTo']) {

       $query->andWhere('u.requestDate<= :to')
                        ->setParameters(['to' => $entity['dateTo']]);
   }
   $resultQuery = $query->getQuery()->getResult();          

查询结果:

UserController.php on line 7772:
array:9 [▼
  0 => User {#3292 ▼
    -requestDate  => DateTime {#3289 ▼
      +"date": "2017-11-16 12:25:46.000000"
      +"timezone_type": 3
      +"timezone": "UTC"
    }
    -name: "Patrick"
    -surname: "Jhonson"
    -car: "Mercedes"
  }
  1 => User {#3296 ▼
    -requestDate  => DateTime {#3777 ▼
      +"date": "2017-11-17 13:30:15.000000"
      +"timezone_type": 3
      +"timezone": "UTC"
    }
    -name: "Peter"
    -surname: "Jhonson"
    -car: "Jaguar"
  }
  2 => User {#3299 ▼
    -requestDate  =>  DateTime {#3790 ▼
      +"date": "2017-11-21 06:51:29.000000"
      +"timezone_type": 3
      +"timezone": "UTC"
    }
    -name: "Anna"
    -surname: "Stark"
    -car: "Seat"
  }

问题在于将任何日期与日期进行比较": "----/---/-- 00:00:00.000000" 当我在表单中设置dateTo 时,创建的日期时间是与00:00:00 小时比较的日期,我需要将此data 与23:59:59 进行比较,因为如果@987654326 一天中的小时@ > dateTo 小时我在$resultQuery 之前的所有用户@ 987654329@ 不包括dateTo 天。

如果你让所有用户得到requestDate => 2017-11-21 结果将是requestDate > 2017-11-21 导致dateTo 的小时是00:00:00

【问题讨论】:

  • 为什么不只比较日期?例如andWhere("DATE(u.requestDate)&lt;= :to")-&gt;setParameters(['to' =&gt; $entity['dateTo']]) 这是假设 dateTo 实际上是日期而不是日期时间
  • 好的,我会试试的
  • 我有这个错误 [Syntax Error] line 0, col 43: Error: Expected known function, got 'DATE'

标签: php sql-server symfony date datetime


【解决方案1】:

我假设$entity['dateTo']DateTime 类的一个实例,要获得与dateTo 参数匹配的结果,无论小时/时间如何,您都可以做一个简单的技巧,只需在您的参数中添加一天并更改比较从&lt;=&lt; 的标准,所以它会给你预期的输出

$dateTo = $entity['dateTo'];
if ($dateTo) {
    $dateTo->add(new \DateInterval('P1D'));
    $query->andWhere('u.requestDate < :to')
          ->setParameters(['to' => $dateTo]);
}

【讨论】:

    猜你喜欢
    • 2020-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-11
    • 2015-10-22
    • 1970-01-01
    • 2020-05-17
    • 2014-01-10
    相关资源
    最近更新 更多