2011-08-17 44 views
8

Tôi muốn kiểm tra xem chuỗi có định dạng thời gian này:Làm cách nào để kiểm tra định dạng ngày của chuỗi trong PHP?

Y-m-d H:i:s 

và nếu không hơn làm một số mã ví dụ

if here will be condition do { this } 
else do { this } 

Làm cách nào để thực hiện điều kiện này trong PHP?

+0

Cũng là đầu vào này hay gì đó? Điều này sẽ được tất cả mọi người sử dụng? Tôi hỏi vì tại sao không chỉ tạo ngày? Sau đó, nó có thể là bất kỳ định dạng nào bạn muốn. Nếu không, như bạn đã đoán regex là cách tốt nhất. Nó vẫn có thể là một không hợp lệ mặc dù. Leap năm và những gì không. – Matt

+0

Trong trường hợp này tôi sẽ lặp lại câu nói nổi tiếng: Một số người, khi đối mặt với một vấn đề, hãy nghĩ rằng "Tôi biết, tôi sẽ sử dụng các biểu thức chính quy." Bây giờ họ có hai vấn đề. -Jamie Zawinski, tôi cảm thấy đây là một trong những trường hợp đó. – Matt

+0

@Matt: thẻ regex đã được thêm bởi tôi, không phải bởi kaspernov – Mchl

Trả lời

0

Câu trả lời có thể liên quan đến regular expressions. Tôi khuyên bạn nên đọc tài liệu này và sau đó quay lại đây nếu bạn vẫn gặp sự cố.

0

Bạn luôn có thể chỉ buộc nó:

date('Y-m-d H:i:s',strtotime($str)); 
19

preg_match là những gì bạn đang tìm kiếm, cụ thể:

if(preg_match('/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/',$date)){ 
    //dothis 
}else{ 
    //dothat 
} 

nếu bạn thực sự chỉ muốn được định dạng đúng ngày, sau đó

/\d{4}-[01]\d-[0-3]\d [0-2]\d:[0-5]\d:[0-5]\d/ 
16

Bạn không. Không thể biết đó là Y-m-d hoặc Y-d-m hoặc thậm chí Y-d-dY-m-m. 2012-05-12 là gì? 12 tháng 5 hoặc 5 tháng 12?

Tuy nhiên, nếu bạn đang hài lòng với điều đó, bạn luôn có thể làm:

// convert it through strtotime to get the date and back. 
if($dt == date('Y-m-d H:i:s',strtotime($dt))) 
{ 
    // date is in fact in one of the above formats 
} 
else 
{ 
    // date is something else. 
} 

Mặc dù bạn có thể muốn xem nếu preg_match('/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/',$date) không nhanh hơn là về vấn đề này. Chưa thử nghiệm nó.

+6

'Y-m-m':' 2012-05-12' ... Có thể ngày 12 tháng 12 năm 2012. – cwallenpoole

+1

Thanh lịch hơn nhiều so với cụm từ thông dụng trong sách của tôi. –

3
if (preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/', $yourdate)) { 
    // it's in the right format ... 
} else { 
    // not the right format ... 
} 

Lưu ý rằng điều này chỉ kiểm tra chuỗi ngày giống như một loạt các chữ số được phân tách bằng dấu hai chấm và dấu gạch ngang. Nó KHÔNG kiểm tra những điều kỳ quặc như '2011-02-31' (ngày 31 tháng 2) hoặc '99: 99: 99 'trong một thời gian (99 giờ?).

+0

Cảm ơn bạn đã giải quyết được sự cố của mình mà không phải thêm một câu hỏi khác. – Allerion

+0

đã làm việc cho tôi hôm nay. + 1 –

1

Từ php.net

đây là một chức năng mát mẻ để xác nhận một datetime mysql:

<?php 
function isValidDateTime($dateTime) 
{ 
    if (preg_match("/^(\d{4})-(\d{2})-(\d{2}) ([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/", $dateTime, $matches)) { 
     if (checkdate($matches[2], $matches[3], $matches[1])) { 
      return true; 
     } 
    } 

    return false; 
} 
?> 
13

Làm thế nào để kiểm tra định dạng ngày chuỗi trong PHP?

if (DateTime::createFromFormat('Y-m-d G:i:s', $myString) !== FALSE) { 
echo 'true'; 
}                
+3

Tại sao điều này không cao hơn trong danh sách? –

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