我写这个的原因是因为日期时间输入像
<?= $this->Form->input('start', ['class' => 'form-control', 'label' => false, 'interval' => 5]); ?>
应始终显示当前用户时间,但不会显示。
我所做的是,我将用户对象与时区相关联:即欧洲/华沙。我的应用程序中的每个用户都将此时区保存在数据库中。
为了让应用程序保持所有日期和时间的正确,我在bootstrap.php中设置了默认时区,并将app.php / default数据源设置为“UTC”。
当我从数据库中读取对象时,我得到一个UTC时间戳日期时间。我将所有日期时间保留在DATETIME字段中。
例如,我使用'start'字段值读取任务记录:'2017-10-10 12:41:17'和'end'字段值:'2017-10-10 13:41:17' (一个小时的任务)。这很简单。
但如果该任务显示给具有不同时区的用户,让我们说它是'Europe / Warsaw',我需要使用适当的用户时区来获取这些日期时间。
如果我选择:
<?= $this->Form->input('start', ['class' => 'form-control', 'label' => false, 'interval' => 5, 'value' => (new Cake\i18n\Time($task->start))->setTimezone($this->request->session()->read('Auth.User.timezone'))]); ?>
日期时间对于用户来说是正确的,但是当我想要保存任务时,问题就开始了,即使“开始”没有被修改。
会发生什么?
根据用户的时区偏移量,“开始”值更新为+2小时。
问题是:
尝试: https://book.cakephp.org/3.0/en/core-libraries/internationalization-and-localization.html#parsing-localized-datetime-data 由于日期时间没有更新,它们没有工作,它们不断增加用户时区。