CakePHP 2.6 DateTime输入和用户时区
问题描述:
给定一个在不同时区运行的Web应用程序,有没有CakePHP 2.x dateTime输入的方法来显示在编辑时显示给用户的值,以便在他们的时区中。CakePHP 2.6 DateTime输入和用户时区
例如,如果我有一个存储在数据库中的记录(表示appointment_date
(将在UTC时区中)),如果我作为时区America/Jamaica
中的用户,我想要编辑该记录,并在输入时显示我的值区域,就像我这样做时:
<?php echo $this->Form->dateTime('appointment_date'); ?>
当然,我们假设我们将在保存前转换回UTC时区。
答
我在这里创建了一个要点:https://gist.github.com/antoniovassell/fed29e782be33b7eb5ab 它允许使用扩展FormHelper的自定义助手类来处理dateTime输入时区转换的抽象方法。
public function dateTime($fieldName, $dateFormat = 'DMY', $timeFormat = '12', $attributes = array()) {
$attributes = parent::value($attributes, $fieldName);
if (!empty($attributes['value'])) {
$attributes['value'] = CakeTime::format('Y-m-d H:i:s', $attributes['value']);
}
return parent::dateTime($fieldName, $dateFormat, $timeFormat, $attributes);
}
因此,除了使用TimeHelper手动转换形式值用户时区,然后将该值设置为输入,我们可以通过覆盖表单DATETIME函数自动执行此。只要我们拨打echo $this->Form->dateTime('my_field');
,我们就会自动执行此操作。
当你说“在他们的时区显示”你的意思是时间下拉列表中的默认值显示我的本地时间(而不是UTC)? – robmcvey
是正确的,但请注意这将是记录的“现有”值。想象一下,编辑一个名为appointment_date的字段(最初以db的形式保存为UTC) – antoniovassell