PHP - конвертировать дату из нестандартного формата

0

Я разбираю фид, который возвращает дату в форме:

20150129180000

который должен быть [yyyy] [mm] [dd] [hours] [minutes] [seconds]

Я попытался форматировать это с помощью функции php date():

date('Y-m-d H:i:s', $event['start-dt'])

и получил это:

640502-03-05 12:33:20

что явно не так. Есть ли гладкий способ преобразования этого, или мне просто нужно объединить строку вручную?

  • 3
    RTFM : php.net/date 2-й аргумент даты - это метка времени Unix, которая НЕ является тем, что вы передаете. У вас есть числовая строка, и вы должны передать ее в date_create_from_format
Теги:
date

3 ответа

4
Лучший ответ

доктор

$date = DateTime::createFromFormat('YmdHis', '20150129180000');
echo $date->format('Y-m-d H:i:s');
  • 1
    Попытка сделать редактирование, но stackoverflow не позволил бы такое маленькое изменение. В любом случае - вот ссылка на английские документы (оригинальная ссылка на русскую версию php.net): php.net/manual/en/datetime.createfromformat.php
  • 0
    Спасибо! Никогда не знал об этой функции.
Показать ещё 1 комментарий
3

Формат несколько запутан по сравнению с date пока вы к ней не привыкли, но это соответствует вашей строке даты:

$date = DateTime::createFromFormat('YmdGis', '20150129180000');
echo $date->format('Y-m-d H:i:s');
3

Вы можете использовать preg_replace для форматирования строки

$date_str = preg_replace("/^(\d){4}(\d){2}(\d){2}(\d){2}(\d){2}(\d){2}/","$1-$2-$3 $4:$5:$6",$event["start-dt"]);
date('Y-m-d H:i:s', strtotime($date_str));

Или используйте объект php DateTime

$date = new DateTime($date_str);

Или еще лучше, используйте метод DataTime createFromFormat

$format = "YmdGis";
$dateObj = DateTime::createFromFormat ( $format, $event['start-dt'] ); 

Затем вы можете использовать getTimestamp для получения метки времени для вычислений, если вам это нужно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню