У меня есть массив даты в формате, который возвращается PHP-процедурой date_parse. Мне нужно преобразовать этот массив даты в строку даты.
Я ищу функцию, которая выполняет обратную процедуру date_parse. Это функция, которая примет массив даты в качестве параметра и вернет строку даты.
http://php.net/manual/en/function.date-parse.php
У массива дат иногда есть только значения для «год», «месяц» и «день». В других случаях у него будут значения «год», «месяц», «день», «час», «минута» и «секунда». Если отсутствуют часовые, минутные и второстепенные значения, я ожидаю, что процедура вернет строку даты с 00:00:00 для часа, минуты и второй части строки.
Я потратил некоторое время на поиск, но до сих пор не нашел функцию, противоположную date_parse.
Я искал ответ на тот же вопрос, но не смог его найти. Я нашел несколько примеров в документации PHP, используя date()
и mktime()
и придумал это …
$date_array = date_parse($date_string); // returns original date string assuming the format was Ymd H:i:s $date_string = date('Ymd H:i:s', mktime($date_array['hour'], $date_array['minute'], $date_array['second'], $date_array['month'], $date_array['day'], $date_array['year']));
Я проверил это, и строка будет содержать нули, которые вы хотите, если час, минута и секунда не передаются в mktime()
.
Ну, лучшее, что я могу найти, это просто использовать sprintf
… mktime
требует установки языкового стандарта времени, и мне также не нравится проходить временную метку для форматирования даты.
Итак, просто напечатайте отформатированные поля:
// Parse from YYYY-MM-DD to associative array $date = date_parse_from_format("Ymd", "2014-07-15"); // Write back to DD/MM/YYYY with leading zeros echo sprintf("%02d/%02d/%04d", $date["day"], $date["month"], $date["year"]);
EDIT: но это решение требует некоторой настройки, если вам нужно, например, напечатать только последние 2 цифры года (например, с 1984 года до «84»).
Я использую выбор даты в форме, а формат возврата – массив:
[start] => Array ([month] => 04 [day] => 26 [year] => 2016 [hour] => 05 [min] => 54 [meridian] => pm) [end] => Array ([месяц] => 04 [день] => 26 [год] => 2016 [час] => 05 [мин] => 54 [меридиан] => pm)
Способ преобразования этого объекта на сегодняшний день следующий:
$timeArray = $this->request->data['Task']['start']; $start = $this->Task->deconstruct('start', $timeArray);
Моя модель «Задача», и ключ для массива дат «start», вам нужно заменить эти два поля своим.
И выход объекта даты:
2016-04-26 17:54:00
Ссылка: как лучше всего преобразовать данные формы выбора даты CakePHP в объект PHP DateTime?