Эквивалент date_create_from_format для PHP 5.2 (или ниже) - PullRequest
7 голосов
/ 12 апреля 2010

Я работаю с PHP 5.3 на моей локальной машине, и мне нужно проанализировать формат даты в Великобритании (дд / мм / гггг). Я обнаружил, что strtotime не работает с этим форматом даты, поэтому я использовал date_create_from_format - что прекрасно работает.

Теперь моя проблема в том, что мой промежуточный сервер работает под управлением PHP 5.2, и date_create_from_format не работает в этой версии. (Это общий сервер, и он не знает, как обновить его до PHP 5.3)

Так есть ли функция, аналогичная date_create_from_format, которую я могу использовать? Сделанный на заказ или PHP нативный?

Ответы [ 5 ]

13 голосов
/ 12 апреля 2010

Если strptime вам недоступен, то здесь другая идея. Он аналогичен подходу полковника Шрапнеля, но вместо этого использует sscanf для анализа значений части даты в переменных и использует их для создания нового объекта DateTime.

list($day, $month, $year) = sscanf('12/04/2010', '%02d/%02d/%04d');
$datetime = new DateTime("$year-$month-$day");
echo $datetime->format('r');
2 голосов
/ 25 августа 2012

включите этот код:

function DEFINE_date_create_from_format()
{

  function date_create_from_format( $dformat, $dvalue )
  {

    $schedule = $dvalue;
    $schedule_format = str_replace(array('Y','m','d', 'H', 'i','a'),array('%Y','%m','%d', '%I', '%M', '%p' ) ,$dformat);
    // %Y, %m and %d correspond to date()'s Y m and d.
    // %I corresponds to H, %M to i and %p to a
    $ugly = strptime($schedule, $schedule_format);
    $ymd = sprintf(
        // This is a format string that takes six total decimal
        // arguments, then left-pads them with zeros to either
        // 4 or 2 characters, as needed
        '%04d-%02d-%02d %02d:%02d:%02d',
        $ugly['tm_year'] + 1900,  // This will be "111", so we need to add 1900.
        $ugly['tm_mon'] + 1,      // This will be the month minus one, so we add one.
        $ugly['tm_mday'], 
        $ugly['tm_hour'], 
        $ugly['tm_min'], 
        $ugly['tm_sec']
    );
    $new_schedule = new DateTime($ymd);

   return $new_schedule;

  }
}

if( !function_exists("date_create_from_format") )
  DEFINE_date_create_from_format();
2 голосов
/ 12 апреля 2010

Попробуйте strptime(), который доступен в PHP 5.1 и выше.

1 голос
/ 12 апреля 2010

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

list($d,$m,$y)=explode("/",$datestr);
0 голосов
/ 02 января 2015

используйте формат DD-MM-YY и отметку времени, я думаю, вам будет легче

$date="31-11-2015";
$timestamp=strtotime($date);
$dateConvert=date('d-m-Y', $timestamp);
echo $dateConvert;

Я использовал его

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...