Преобразование строки в дату в PHP - PullRequest
0 голосов
/ 15 марта 2012

Я бы хотел перевести такую ​​дату «2012 30 марта 21:30» в этот формат 2012-03-30 09:30:00 Какой самый простой способ сделать это? Мне нужно, чтобы он работал на PHP 5.2 и более ранних версиях, поэтому для меня это решение бесполезно

date_format('Y-m-d H:M:S',date_create_from_format('Y m F g:i A', '2012 30 March 9:30 pm'))

Ответы [ 5 ]

1 голос
/ 15 марта 2012

Это извлечет каждый компонент из даты и переставит его так, чтобы strtotime() понимал.Преобразуйте в любой формат даты, который вы хотите после этого.

Использование регулярных выражений, вероятно, излишне.

function parse_date_time_to_ts($dt) 
{
    $dt_pattern = '#([0-9]{4})\s+([0-9]{1,2})\s+([a-z]+)\s+([0-9]{1,2}:[0-9]{2})\s+(am|pm)#is';
    $dt_replace = '$2 $3 $1 $4 $5';

    return strtotime(preg_replace($dt_pattern, $dt_replace, $dt));
}
1 голос
/ 15 марта 2012

Используйте sscanf (), затем создайте строку в правильном формате, strtotime () для нее и затем date () с требуемым форматом.

1 голос
/ 15 марта 2012
EDIT: following Stewie advice:

<?php

list($year, $day, $month, $hour, $minute, $ampm) = sscanf("2012 30 March 9:30 pm
", "%d %d %s %d:%d %s");

if($ampm == 'pm') $hour += 12;

echo date("Y-m-d H:i:s", strtotime($day . ' ' . $month . ' ' . $year . ' ' . $ho
ur . ':' . $minute));
0 голосов
/ 15 марта 2012

Попробуйте это

list($year, $month, $day, $year, $hour, $minutes, $a) = sscanf("2012 30 March 9:30 pm", "%d %d %d $s $d:$d $s");
echo date("Y-m-d h:i:s", strtotime($day." ".$month." ".$year." ".$hour.":".minutes." ".$a));
0 голосов
/ 15 марта 2012

http://php.net/manual/en/function.strtotime.php#106043

см. Ссылку на официальную документацию и вклад пользователя ...

...