在 2 个月之间过滤
我需要根据所选月份过滤数据。
我们正在UTC-0
中保存数据,需要在UTC+1
中读取数据。
情况:
如果我们像28-02-2017 23:55 (UTC-0)
一样保存在 DB 日期中并为 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);
});
调试您在那里创建的日期对象,它们将保存您经过的确切日期以及它们引用的时区信息,因此,当传递到查询中时,您将与这些确切日期进行比较 - 数据库(层)不关心时区,它根本不知道时区。
您需要将日期转换为最初存储日期的时区,即 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(CakeChronosChronos) {
'time' => '2017-02-28 23:00:00.000000',
'timezone' => 'UTC',
'hasFixedNow' => false
}
object(CakeChronosChronos) {
'time' => '2017-03-31 22:00:00.000000',
'timezone' => 'UTC',
'hasFixedNow' => false
}