CakePHP 2.6 Ввод даты и времени и часовой пояс пользователя

Учитывая веб-приложение, которое работает в разных часовых поясах, есть ли способ для входных данных CakePHP 2.x dateTime отображать значения, отображаемые пользователю при редактировании, в его часовом поясе.

Например. Если у меня есть запись, хранящаяся в базе данных, которая говорит appointment_date (что будет в часовом поясе UTC), если я, как пользователь в часовом поясе America/Jamaica, я бы хотел отредактировать эту запись с входными данными, показывающими мне значения в мое время -zone, например, когда я делаю это:

<?php echo $this->Form->dateTime('appointment_date'); ?>

И, конечно же, давайте предположим, что мы вернемся к часовому поясу UTC непосредственно перед сохранением.


person antoniovassell    schedule 29.05.2015    source источник
comment
Когда вы говорите, что показано в их часовом поясе, вы имеете в виду, что значение по умолчанию в раскрывающемся списке времени показывает мое местное время (а не UTC)?   -  person robmcvey    schedule 29.05.2015
comment
правильно, но обратите внимание, что это будет существующее значение записи. Представьте, что вы редактируете поле с именем встреча_дата (которое изначально было сохранено в БД как UTC).   -  person antoniovassell    schedule 29.05.2015


Ответы (1)


Я создал список здесь: https://gist.github.com/antoniovassell/fed29e782be33b7eb5ab, который допускает абстрактный способ возможной работы с преобразованием часового пояса ввода dateTime с использованием пользовательского вспомогательного класса, который расширяет FormHelper.

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, а затем установки значения для ввода, мы могли бы автоматизировать это, переопределив функцию Form dateTime. И всякий раз, когда мы вызываем echo $this->Form->dateTime('my_field');, мы делаем это автоматически.

person antoniovassell    schedule 29.05.2015