CakePHP daysAsSql导致错误的条件

时间:2014-03-17 11:41:12

标签: php cakephp datetime

我正在为我的应用启用时区支持。在内部,我们会保存每个日期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函数,还是我在这里有误解?

0 个答案:

没有答案