PHP 5.2 için date_create_from_format eşdeğer (veya daha düşük)

4 Cevap php

Benim yerel makine üzerinde PHP 5.3 ile çalışan ve bir İngiliz tarih biçimini (gg / aa / yyyy) ayrıştırmak için gerekli ediyorum. I strtotime bu tarih biçimi ile işe yaramadı bulundu, bu yüzden yerine date_create_from_format kullanılır - büyük çalıştığı.

Şimdi, benim sorunum, benim evreleme sunucu PHP 5.2 çalıştıran ve date_create_from_format bu sürümünde çalışmıyor olmasıdır. (Bu paylaşılan bir sunucu, ve PHP 5.3 yükseltmek için nasıl bir ipucu olmazdı)

Yani kullanabilirsiniz date_create_from_format benzer bir işlevi var? Ismarlama veya PHP yerli?

4 Cevap

strptime sizin için uygun değilse, o zaman burada farklı bir fikir. Bu Albay şarapnel yaklaşımına benzer, ancak bunun yerine sscanf değişkenleri içine tarih bölümü değerlerini ayrıştırmak için kullandığı ve yeni DateTime nesne oluşturmak için bu kullanır.

list($day, $month, $year) = sscanf('12/04/2010', '%02d/%02d/%04d');
$datetime = new DateTime("$year-$month-$day");
echo $datetime->format('r');

Eğer sadece belirli bir biçimi ayrıştırmak için gerekiyorsa, bu temel dize operasyon.

list($d,$m,$y)=explode("/",$datestr);

Bu kod içerir:

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();