2011-10-04 69 views
3

如何檢查變量$date是否包含2011-09-20形式的日期?這是爲了知道$date是否包含任何字母,因爲我想使用date()並給出錯誤。如何檢查變量是否包含日期或日期和文本?

+0

你爲什麼要限制自己的格式「2011-09-20」? '20-09-2011'有什麼問題?來自美國以外的國家,我可以告訴你,因爲我使用的日期格式不是美國使用的格式,所以出現錯誤非常令人沮喪。 strtotime()接受所有的日期格式,請不要毀掉你的軟件;) –

+0

我也在美國以外。但是我使用的產品來自美國。 – EnexoOnoma

+0

我添加一個演示:http://stackoverflow.com/questions/7645094/how-to-check-if-a-variable-contains-a-date-or-a-date-and-text/7645146#7645146 – JellyBelly

回答

11

試試這個:

$date = '2011-09-20'; 
list($y, $m, $d) = explode("-", $date); 
if(checkdate($m, $d, $y)){ 
    echo "OK Date"; 
} else { 
    echo "BAD Date"; 
} 

演示在這裏:http://codepad.org/3iqrQrey

+0

當試圖解析帶有字符串內容的變量時,建議避免非正確的錯誤: 'if(is_numeric($ y)&& is_numeric($ m)&& is_numeric($ d)&& checkdate($ m,$ d, $ y)){' – ldmuniz

0

也許它幫助,如果你嘗試is_numeric()結合的str_replace()方法,像這樣:

<?php 
    $isValid = is_numeric(str_replace('-', '', $myDateToCheck)); 
?> 

當然,這並沒有說明日期的格式,而是顯示變量是否包含任何非數字字符。

如果上述示例返回true,則可能需要使用checkdate()方法來進一步調查變量。

5

儘管它並不完美,

if (false === strtotime($date)) { 
    echo 'invalid date'; 
else { 
    echo 'valid date'; 
} 
+0

爲什麼?它出什麼問題了?我認爲這是完美的方式,允許所有可能的日期格式。 –

+1

好吧,strtotime('now')會返回一個時間戳,這不是OP想要的 – Alfwed

0

可以使用正則表達式(^[1-9]{4}-[1-9]{2}-[1-9]{2}$)與preg_match這一點。

另一種方法是strptime,它用於將字符串(與某種格式相關聯)轉換爲時間。

1

這不是exatly你要求什麼(也接受其他日期格式),但將有助於找出日期是否有效:
strtotime($date)將返回FALSE如果$date具有無效的日期格式。
Manual

0

SOLUTION 1

結合什麼@Alfwed和@JellyBelly中寫道,這裏是我是如何做的:

public function valid_date($inputdate){ 
    $date = $inputdate; 
    if (strtotime($date)){ 
     if (strpos($date,'/') !== false) { 
     list($day, $month, $year) = explode('/', $date); 
     return checkdate($month, $day, $year); 
     }else{ 
      return false; 
     } 
    }else{ 
     return false; 
    } 
} 

它會檢查羯羊如果輸入文本(例如:「 adasdsad「),或者它是否具有日期格式(例如:」10/02/1988「),並檢查它是否是有效日期。

如果輸入日期是10-10-1996也是有效格式或10.02.1996,它將不會接受它們,因爲我要求用戶使用帶「/」的格式。只要刪除,如果你不想做這個驗證,就是這樣。

解決方案2

我發現,解決方案1,如果你打算進入一個將來的日期不起作用。所以我不得不尋找另一種解決方案。那就是:

public function valid_date($date, $format = 'd/m/Y'){ 
     $d = DateTime::createFromFormat($format, $date); 
     return $d && $d->format($format) == $date; 
} 

這不是我的,發現它在:link

相關問題