2011-11-07 52 views
1

我正在設置一個基本的CMS,允許客戶將文章添加到他們的移動應用程序的中間。 CMS以PHP編碼,並將使用JSON將內容傳送到移動應用程序。strtotime日期驗證通過無效日期

現在我的問題是有一個選項發佈文章在某個日期,所以我想驗證日期以檢查它是有效的。

因此,爲了測試可能性,我製作了一個小腳本。我使用strtotime()檢查日期是有效的,我的腳本是:

<?php 

    $date[] = '2011-31-01'; 
    $date[] = '2011-02-31'; 

    foreach($date as $str) { 
     if(strtotime($str) == false) { 
      $result[] = '<p>[' . $str . '] Resulted in an <span style="color: red;">Error.</span></p>'; 
     } else { 
      $result[] = '<p>[' . $str . '] Resulted in <span style="color: green;">Success.</span></p>'; 
     } 
    } 

    foreach($result as $return) { 
     echo $return; 
    } 

?> 

現在我的問題是日期2011-02-31這是31st February 2011正在恢復爲有效,當顯然事實並非如此。所以我的問題是爲什麼它會這樣做?有沒有更好的方法來檢查日期是否有效並存在?

在此先感謝。

+0

[strtotime()將一個不存在的日期轉換爲另一個日期](http://stackoverflow.com/questions/7583579/strtotime-converts-a-non-existing-date-to-another-date) – hakre

+1

'2011-01-31'被解析爲'31。 (對於我來說是正確的)...除此之外,'strtotime'並不是爲了驗證日期,而是試圖以最好的方式解析日期(不管它們的格式如何)。 – poke

+0

@hakre這不是重複的,因爲我的問題與被轉換爲其他東西的日期無關。不管怎麼說,還是要謝謝你。 – RobFos

回答

6

checkdate();驗證公曆日期。如果給定日期有效,則返回TRUE;否則返回FALSE。

if(checkdate(2, 31, 2011)){ 
     echo "Yeah"; 

    } else {echo "nah";} 

它返回false!

這就是要走的路。

2

除非您的日期字符串有一個(或一小組)固定格式,否則很難獲得可接受的結果。如果你知道格式,你可以直接自己解析字符串(然後用checkdate進行測試),或者使用strptime嘗試解析已知格式,直到獲得有效結果。

如果您不知道格式,並且您必須使用strtotime,那麼您需要接受strtotime將嘗試以最佳方式解析日期字符串。這可能會導致與預期不同的日期。