2011-08-17 189 views
8

我想檢查字符串有這個時間格式:如何在PHP中檢查字符串的日期格式?

Y-m-d H:i:s 

,如果不超過例如做一些代碼

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

如何在PHP中做這個條件?

+0

也是這個輸入什麼的?這會被大家使用嗎?我問,爲什麼不只是創建日期?然後它可以是任何你想要的格式。否則,因爲你已經猜到了正則表達式是最好的方法。但它仍然可能是無效的。閏年和什麼不是。 – Matt

+0

在這種情況下,我會重複一句名言:有些人在遇到問題時,會想「我知道,我會用正則表達式」。現在他們有兩個問題。傑米Zawinski,我覺得這是其中的一種情況。 – Matt

+0

@Matt:正則表達式標籤是由我添加的,而不是由kaspernov – Mchl

回答

0

答案可能涉及regular expressions。我建議閱讀本文檔,如果您仍然遇到問題,請回到這裏。

0

你可能永遠都只是迫使它:

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

preg_match是你在找什麼,具體有:

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

如果你真的只需要正確格式化的日期,然後

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

你沒有。這是不可能分辨出是Y-m-d還是Y-d-m,或者甚至是Y-d-d vs Y-m-m。什麼是2012-05-12? 5月12日或12月5日?

但是,如果你是視頻內容,可以,你總是可以做:

// 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. 
} 

雖然你可能想看看preg_match('/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/',$date)是不是更快這一點。沒有測試過它。

+6

'Y-m-m':'2012-05-12' ... 2012年12月12日。 – cwallenpoole

+1

比我的書中的正則表達式更優雅。 –

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 ... 
} 

請注意,這隻會檢查日期字符串是否看起來像一串用冒號和破折號分隔的數字。它不會檢查'2011年2月31日'(2月31日)或'99:99:99'之類的古怪事件(99點鐘?)。

+0

謝謝你解決我的問題,而不必添加另一個問題。 – Allerion

+0

今天工作+ 1 –

1

php.net

這裏是一個很酷的功能來驗證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

如何查詢字符串的日期格式在PHP?

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

爲什麼這不是更高的名單? –