Я пытаюсь сделать что-то умное, чтобы разобрать дату в любом международном формате.
В моем интерфейсе я использую jquery ui для выбора даты, и каждый язык имеет свой формат даты.
Fr: d / m / Y En: m / d / Y …
ОК, но теперь в php-части мне нужно сохранить эту дату в том же формате (Mysql Ymd). Я бы хотел избежать использования корпуса коммутатора и тому подобного, поэтому я начал искать другую альтернативу.
Лучшее, что я нашел, это
http://www.php.net/manual/en/datetime.createfromformat.php Эта функция позволит мне разобрать даты, если я знаю формат.
Например
$format = 'Ym-d'; $date = DateTime::createFromFormat($format, '2009-02-15');
Хорошо, так что это хорошее начало, но теперь я хотел бы найти стандартный формат даты для текущей локали.
Поэтому я нашел это:
http://www.php.net/manual/en/intldateformatter.getpattern.php
Но я не знаю, как заставить его работать, потому что я получаю непогашенные результаты:
php > $i = new IntlDateFormatter("fr_FR.utf8",IntlDateFormatter::SHORT,IntlDateFormatter::NONE); php > echo $i->getPattern(); dd/MM/yy /* correct ! */
но
php > $i = new IntlDateFormatter("en_US.utf8",IntlDateFormatter::SHORT,IntlDateFormatter::NONE); php > echo $i->getPattern(); M/d/yy /* wtf */
Я что-то упускаю ?
благодаря
Не существует «универсального стандарта символа формата даты». Символом «y» может быть двузначный год, 4-значный год или даже 3-буквенный сокращенный месяц (маловероятный), в зависимости от источника.
Символы форматирования для IntlDateFormatter
описаны здесь . Как видно из документации, для этой реализации «d» – это дата без начальных нулей, а «dd» содержит ведущие нули. И «М», и «ММ» представляют месяц с ведущими нулями. «Yy» – это 2-значный год.
Существует достаточно разницы между этим и символами формата даты jQuery UI, для которых вам понадобится карта данных для сопоставления IntlDateFormatter
формата IntlDateFormatter
символами формата jQuery UI datepicker и наоборот.
Что-то вроде этого должно быть достаточно (непроверено):
// PHP => jQuery $formatMap = array( 'dd' => 'dd', 'd' => 'd', 'MM' => 'mm', 'M' => 'mm', 'yy' => 'y' // and so on... );
Как только вы настроите свою карту, вы можете создать свой IntlDateFormatter
на основе языка, преобразовать символы этого формата в символы формата даты jQuery UI, а затем отправить формат в интерфейс.
Когда пользователь отправляет назад выбранную дату, вы можете сделать то же самое в обратном порядке, чтобы вернуться к символам IntlDateFormatter
. В этот момент вы можете использовать комбинацию IntlDateFormatter::setPattern()
для установки формата в стиле MySQL и datefmt_format()
(или эквивалент) для фактического форматирования опубликованной даты.
Надеюсь это поможет.