过滤2个月
我需要根据选定的月份过滤数据。
我们正在UTC-0
保存数据,需要读取UTC+1
中的数据。
情况:
如果我们保存在像28-02-2017 23:55 (UTC-0)
这样的数据库日期并为3月(03-2017)制作过滤器,我应该在结果(UTC+1
)中看到此输入,如果我们输入了31-03-2017 23:55 (UTC-0)
我不应该在结果中看到这个输入(UTC+1
)。
尝试:
$fromDate = new Chronos('2017-03-01 00:00:00', 'Europe/Vienna');
$toDate = new Chronos('2017-04-01 00:00:00', 'Europe/Vienna');
$q = $this->Users->find('all')
->where(function ($exp, $q) use ($fromDate, $toDate) {
return $exp->between('Users.created', $fromDate, $toDate);
});
答案 0 :(得分:1)
调试您在那里创建的日期对象,它们将保存您已经过的确切日期,以及它们引用的时区的信息,因此在传递给查询时,您将进行比较对于这些确切的日期 - 数据库(层)不关心时区,它根本不知道它们。
您需要将日期转换为最初存储日期的时区,即UTC:
$fromDate = new Chronos('2017-03-01 00:00:00', 'Europe/Vienna');
$fromDate = $fromDate->setTimezone('UTC');
$toDate = new Chronos('2017-04-01 00:00:00', 'Europe/Vienna');
$toDate = $toDate->setTimezone('UTC');
日期现在应该如下:
object(Cake\Chronos\Chronos) {
'time' => '2017-02-28 23:00:00.000000',
'timezone' => 'UTC',
'hasFixedNow' => false
}
object(Cake\Chronos\Chronos) {
'time' => '2017-03-31 22:00:00.000000',
'timezone' => 'UTC',
'hasFixedNow' => false
}