我正在为我的应用启用时区支持。在内部,我们会保存每个日期Europe/Vienna
基于时区。
现在我想在用户级别启用时区支持,而不需要很棒的CakePHP Config.timezone
功能。
因此,当用户登录时,我将用户时区写入Config.timezone,所有内容都正常运行。
现在,让我们考虑以下情况:
我在数据库中有一些记录,如下所示:
-- created: 2014-03-17 09:00:00 // Austrian time!
因此,数据库中提到的记录正确显示CakeTime::format()
(目前奥地利和巴西之间有4小时的差异):
-- created: 2014-03-17 05:00:00 // Brasilian time!
用户现在可以使用datepicker从数据库中导出一些记录。让我们想想一下位于巴西的同一个用户,他想要输出一些记录。 (s)他选择2014-03-17作为日期并假设接收他/她时区的所有记录。
目前,我正在使用以下查询:
// from, to = 2014-03-17
$records = $this->find('all', ['conditions' => [CakeTime::daysAsSql($from, $to, 'Object.created')]]);
不幸的是,CakeTime::daysAsSql
会返回以下条件:
(Object.created >= '2014-03-16 00:00:00') AND (Object.created <= '2014-03-16 23:59:59')
虽然我可以理解潜在的变化(因为作为第一步,给定的/ to-value在内部翻译为brasilian时间,然后减半以仅接收日期部分(不考虑时间部分) ,提到的方法返回错误的条件。
就我所知的时区问题而言,上述特定用例的最终条件不应该是这个:
(Object.created >= '2014-03-16 20:00:00') AND (Object.created <= '2014-03-17 19:59:59')
那么,我使用错误的CakePHP函数,还是我在这里有误解?