2013-12-06 2 views
0

У меня есть этот код:Как правильно форматировать/преобразовывать дату и время на основе текущей локали?

$dateTime = new DateTime('@'.strtotime('+30 minutes')); 
$dateTime->setTimezone(new DateTimeZone($someModel->timezone)); 
$otherModel->send_at = $dateTime->format($otherModel->getDateTimeFormat()); 

$otherModel->getDateTimeFormat() Где возвращает M/d/yy h:mm a что нормально, потому что он основан на текущей локали Yii, который основан на CLDR, насколько я знаю.

Теперь, когда я прохожу этот формат для метода DateTime::format() класса в PHP [$dateTime->format($otherModel->getDateTimeFormat())] я получить этот результат: Dec/06/1313 03:1212 pm который смотрит странно, потому что тот формат, который PHP принимает на дату/дата и время не то же самое, как один Yii использует в это локали.

Как решить такую ​​проблему?

Это исправление:

$dateTime = new DateTime('@'.strtotime('+30 minutes')); 
$dateTime->setTimezone(new DateTimeZone($someModel->timezone)); 

// get a timestamp from the current date that also knows about the offset. 
$timestamp = CDateTimeParser::parse($dateTime->format('Y-m-d H:i:s'), 'yyyy-MM-dd HH:mm:ss'); 

// now format using Yii's methods and format type 
$otherModel->send_at = Yii::app()->dateFormatter->formatDateTime($timestamp, 'short', 'short'); 

Идея заключается в том, чтобы использовать DateTime::format() метод в PHP, чтобы извлечь временную метку, которая принимается во внимание часовой пояс пользователя. Затем, основываясь на этой временной отметке, форматируйте в соответствии с форматированием даты и времени Yii.

ответ

1

Ну, ничего странного, ваш формат дата M/d/yy h:mm a, и в соответствии с DateTime::format()documentation:

  • M: Краткое текстовое представление месяца, три буквы
  • y: двузначное представлением а
  • год ... и т.д.

Yii не использует тот же формат: http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns

Вы должны просто использовать CDateFormatter::format(): http://www.yiiframework.com/doc/api/1.1/CDateFormatter#format-detail

+0

спасибо за ответ, я нашел ответ в течение сегодняшнего дня, только что обновил этот вопрос с исправлением. – Twisted1919

Смежные вопросы