2010-04-12 31 views
7

Tôi đang làm việc với PHP 5.3 trên máy cục bộ của mình và cần phân tích định dạng ngày của Vương quốc Anh (dd/mm/yyyy). Tôi thấy rằng strtotime không hoạt động với định dạng ngày đó, vì vậy tôi đã sử dụng date_create_from_format để thay thế - hoạt động tuyệt vời.date_create_from_format tương đương với PHP 5.2 (hoặc thấp hơn)

Bây giờ, sự cố của tôi là máy chủ dàn xếp của tôi đang chạy PHP 5.2 và date_create_from_format không hoạt động trên phiên bản đó. (Đó là một máy chủ được chia sẻ và sẽ không có đầu mối cách nâng cấp nó lên PHP 5.3)

Vì vậy, có chức năng tương tự với date_create_from_format mà tôi có thể sử dụng? Bespoke hoặc bản địa PHP?

Trả lời

13

Nếu strptime không có sẵn cho bạn, thì đây là một ý tưởng khác. Nó tương tự như cách tiếp cận của Đại tá Shrapnel nhưng thay vào đó sử dụng sscanf để phân tích các giá trị ngày tháng thành các biến và sử dụng các giá trị đó để tạo đối tượng DateTime mới.

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

Nếu bạn chỉ cần phân tích cú pháp một định dạng cụ thể, đó là thao tác chuỗi cơ bản.

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

điều này chỉ cho anh ta ba chuỗi, không phải là ngày phân tích cú pháp – user187291

+0

@stereofrog uh oh vấn đề là gì :) –

2

Hãy thử strptime() có sẵn trong PHP 5.1 trở lên.

+2

không có sẵn để giành chiến thắng dows mặc dù – Gordon

+0

Cảm ơn Dav. Có, tôi đang sử dụng Windows cho dev địa phương (sử dụng XAMPP, PHP 5.3), nhưng dàn dựng và các máy chủ trực tiếp là LAMP, do đó, điều này sẽ hoạt động như một sự sụp đổ. – leekelleher

2

bao gồm mã này:

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

Cảm ơn ý tưởng. Thật không may tôi đã không thể đưa nó vào làm việc với định dạng 'Y-m-d H: i: s' ngay cả sau khi tôi đã thêm ánh xạ từ 's' sang '% S' ... – AntonK

0

định dạng sử dụng DD-MM-YY và dấu thời gian, tôi nghĩ rằng nó sẽ được dễ dàng hơn cho bạn

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

Tôi đã sử dụng nó

Các vấn đề liên quan