У меня есть этот код:Как правильно форматировать/преобразовывать дату и время на основе текущей локали?
$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.
спасибо за ответ, я нашел ответ в течение сегодняшнего дня, только что обновил этот вопрос с исправлением. – Twisted1919