Intereting Posts
Изменение имени переменной (нумерация) или добавление чисел в переменную в порядке возрастания для присвоения значений Как вы получаете ширину и высоту изображения SVG в PHP? Добавление данных в переменную php с помощью PDO fetchAll :: fetch_assoc Вытягивание изображения из пользовательской таксономии с помощью ACF Можно ли использовать массив в PHP? Как удалить http, https и slash из пользовательского ввода в php Невозможно создать временный файл в PHP, несмотря на то, что существует каталог temp WooCommerce – добавление пользовательской цены на каждый товар в корзине Пакеты Composer, автозагрузка неклассифицированных файлов Laravel – Соглашения о присвоении имен в базе данных, таблицах и столбцах? Несколько html select и jquery ajax Как использовать контроллеры модулей в Kohana 3? Использование Emacs для веб-разработки? (PHP / MySQL / JavaScript / CSS / HTML Виджет Google Analytics не загружается в разы Как создать файл php для отображения изображения типа <img src = "/ img.php? ImageID = 32" />?

Преобразование формата даты PHP в формат даты jQueryUI Datepicker

[EDIT]: Думаю, у людей возникла проблема, чтобы понять, что я имею в виду, поэтому полностью переписал свои объяснения.

Я работаю над проектом, в котором пользователи могут определять формат даты, используемый на всем сайте. Он использует стандарт формата даты PHP. Например: «год-месяц-день» устанавливается «Ymd».

Стандарт PHP использует односимвольные символы, такие как Y, m, d, F, j, чтобы описать формат даты. Как видно из документации: http://www.php.net/manual/fr/function.date.php

Иногда пользователи могут выбирать дату благодаря jQueryUI Datepicker. Этот компонент описывает формат даты с кодовыми словами, такими как yy, y, mm, dd, D, … http://api.jqueryui.com/datepicker/#utility-formatDate

Я хотел бы показать даты в том же формате как для PHP, так и для Datepicker. Я имею в виду, что PHP должен выводить дату как в формате, заданном пользователем, так и Datepicker должен показывать выбранную дату в том же формате .

При условии:

  1. Формат даты обязательно описывается «PHP-стиль»,
  2. Я не знаю априори, какой формат был задан пользователями

/! \ Это не проблема того, как читать / анализировать / отображать дату из известного формата.

К сожалению, описание формата даты Javascript не такое же, как в PHP. Например, эти 2 формата даты эквивалентны, но описаны по-разному в PHP и Javascript:

  1. PHP: Ymd (устанавливается пользователями)
  2. Javascript: yy-mm-dd

Как вы можете видеть, я не могу просто настроить datepicker с форматом даты PHP, потому что он будет неправильно понят или вообще не будет распознан.

Кто-то (в ответах ниже) советовал создать мой собственный «стандартный конвертер формата даты», соответствующий каждому символу PHP с его эквивалентом в описании формата даты JS. Как:

  • Y => yy
  • m => мм
  • d => dd
  • y => y
  • z => o

Затем замените каждый символ PHP на JS. И поэтому «d / m / Y» будет волшебным образом переведен на «dd / mm / yy».

Но, может быть, кто-то знает еще один правильный способ сделать jQueryUI Datepicker понятным стандартом формата даты PHP?

EDIT: Я написал учебник, который объясняет как проблему, так и решение. Для дальнейшего чтения: http://tristan-jahier.fr/blog/2013/08/convertir-un-format-de-date-php-en-format-de-date-jqueryui-datepicker

Я выбрал жестокий метод: преобразование по символам формата даты. Я сделал фрагмент кода «не так-фиктивный».

 /* * Matches each symbol of PHP date format standard * with jQuery equivalent codeword * @author Tristan Jahier */ function dateformat_PHP_to_jQueryUI($php_format) {    $SYMBOLS_MATCHING = array(        // Day        'd' => 'dd',        'D' => 'D',        'j' => 'd',        'l' => 'DD',        'N' => '',        'S' => '',        'w' => '',        'z' => 'o',        // Week        'W' => '',        // Month        'F' => 'MM',        'm' => 'mm',        'M' => 'M',        'n' => 'm',        't' => '',        // Year        'L' => '',        'o' => '',        'Y' => 'yy',        'y' => 'y',        // Time        'a' => '',        'A' => '',        'B' => '',        'g' => '',        'G' => '',        'h' => '',        'H' => '',        'i' => '',        's' => '',        'u' => ''    );    $jqueryui_format = "";    $escaping = false;    for($i = 0; $i < strlen($php_format); $i++)    {        $char = $php_format[$i];        if($char === '\\') // PHP date format escaping character        {            $i++;            if($escaping) $jqueryui_format .= $php_format[$i];            else $jqueryui_format .= '\'' . $php_format[$i];            $escaping = true;        }        else        {            if($escaping) { $jqueryui_format .= "'"; $escaping = false; }            if(isset($SYMBOLS_MATCHING[$char]))                $jqueryui_format .= $SYMBOLS_MATCHING[$char];            else                $jqueryui_format .= $char;        }    }    return $jqueryui_format; } 

Эта функция обрабатывает все общие кодовые слова между стандартами формата даты и даты Datepicker.

Кроме того, я добавил поддержку экранирования символов:

dm \o\f Y становится dd mm 'of' yy

У вас могут быть проблемы с символами типа «W», «L», которые не имеют эквивалента, обрабатываемого Datepicker.

Вы не можете использовать тот же формат с datepicker, который вы используете с PHP.

Поскольку формат даты PHP используется только с однобуквенными кодами, вам лучше просто взять формат даты PHP и заменить каждый код на соответствующее значение в формате датпикера jQuery, например:

 $PHPFormatOptions = array('y', 'Y', 'm', 'd'); $JSFormatOptions = array('yy', 'yyyy', 'mm', 'dd'); // and so on $JSFormat = str_replace($PHPFormatOptions, $JSFormatOptions, $PHPFormat); 

Не уверен, что я совсем с тобой, но это действительно не должно быть проблемой. Вы можете либо проанализировать входной интерфейс: используя DateTime::createFromFormat cf. php для этого или использовать JSON.
Поскольку JSON имеет стандартный способ форматирования строк даты, вы можете передать JSON-строчную версию даты ввода на PHP, а json_decode – на стороне сервера. Оба этих решения открыты для вас, хотя я считаю, что первый из них будет проще реализовать в вашем случае.

Если вы хотите иметь возможность выбирать формат с обеих сторон, то объект DateTime определенно вам нужен:

 $date = new DateTime(); echo $date->format('Ym-d').' <==> '.$date->format('yM-j'); $postDate = $date->createFromFormat('ym-d',$_POST['submitDate']); echo $postDate->format('Ym-d'); 

Формат объясняется на странице, с которой я связан.

Вот решение:

 function datepicker_format($format) { static $assoc = array( 'Y' => 'yyyy', 'y' => 'yy', 'F' => 'MM', 'm' => 'mm', 'l' => 'DD', 'd' => 'dd', 'D' => 'D', 'j' => 'd', 'M' => 'M', 'n' => 'm', 'z' => 'o', 'N' => '', 'S' => '', 'w' => '', 'W' => '', 't' => '', 'L' => '', 'o' => '', 'a' => '', 'A' => '', 'B' => '', 'g' => '', 'G' => '', 'h' => '', 'H' => '', 'i' => '', 's' => '', 'u' => '' ); $keys = array_keys($assoc); $indeces = array_map(function($index) { return '{{' . $index . '}}'; }, array_keys($keys)); $format = str_replace($keys, $indeces, $format); return str_replace($indeces, $assoc, $format); } 

Волшебный двойной вызов str_replace, вызванный дублированием в иглах и его значениями замены, поэтому строка

 m/d/Y 

становится

 {{3}}/{{5}}/{{1}} 

и после этого эти гнезда заменяют фактическими значениями замены:

 mm/dd/yy 

Хорошо, поэтому лучшим решением для вас было бы хранить все на своем сайте с помощью time ();

Насколько я знаю, datepicker может быть настроен на работу с датами для timestamp PHP

 dateFormat : 'yy-mm-dd', 

Редактировать :

Зачем вам хранить дату, например: Ymd? Он должен храниться как временная метка или int