2011-02-12 12 views
6

Aşağıdaki formda bir tarih formu varsa, $month=2, $day=31, $year= 2010. Geçerli tarih olup olmadığını PHP tarih fonksiyonunu kullanarak nasıl doğrulayabilirim? Teşekkürler.PHP ile nasıl doğrulanacağı

+0

tarihleri ​​** ** metin girişi ** alanları aracılığıyla girilen veya ediliyorsunuz kopyalanan? Genellikle şey tarih akıllıca için, o tarih test edilmesi ve doğrulanması çok kolay ve basit bir yol olabilir olarak ** ** Açılan menüler öneriyoruz. – Eli

+6

@Eli Ne kadar? Firebug veya krom denetçisini kullanarak herkes aşağı açılan menüdeki değerleri düzenleyebilir. Bir tarayıcıdan gelen verileri doğrulamanız gerekir. – Samuel

+0

Üzgünüz, daha açık olmalıydım. Düello doğrulama her zaman en iyisidir. Sayfa ön gönderim validasyonu ve normal kullanıcı için tarih formatının doğrulanması ve işlemden önce sanitasyon için sunucu tarafının onaylanması için (HTML/JavaScript/etc). – Eli

cevap

13

http://php.net/manual/en/function.checkdate.php

checkdate fonksiyon arama "php doğrulamak tarihine" Senin durumunda

dan google ilk sonuçtur, kullanım olacaktır:

checkdate($month, $day, $year); 
+0

Ve en iyi çözüm – RobertPitt

+1

Cevabınızı gönderdiğiniz için teşekkür ederiz! Lütfen buradaki cevabın temel kısımlarını buraya göndermeniz gerektiğini veya postalama risklerinizin silinmesi gerektiğini unutmayın. "Bağlantıdan çok daha fazla" olan cevaplardan bahsedildiği SSS bölümüne bakınız. Bağlantıyı hala isterseniz, sadece 'referans' olarak ekleyebilirsiniz. Cevap, bağlantıya ihtiyaç duymadan kendi başına kalmalıdır. –

1
bool checkdate (int $month , int $day , int $year) 
0

Ben DateTime rahatlığı ile() checkdate katılığına birleştirmek ile geldim budur (O 'Bir sonraki Perşembe' veya 'gibi girdileri dönüştürür 2 hafta önce ')

Giriş dizesi geçersizse false değerini döndürür. Boş tarihler boş olarak döndürülür ve boş olmayan tarihler MySQL stili 'Y-m-d' olarak biçimlendirilir.

/** 
* @return variant null for empty date, mysql date string for valid date, or false for invalid date string 
*/ 
function myCheckDate($date) 
{ 
    $result=false; 
    if($date=='') 
    { 
     $result=null; 
    } 
    else 
    { 
     //Best of both worlds 
     // - flexibility of DateTime (next thursday, 2 weeks ago, etc) 
     // - strictness of checkdate (2000-02-31 is not allowed) 
     $m=false; 
     $d=false; 
     $y=false; 
     $parts=date_parse($date); 
     if($parts!==false) 
     { 
      $m=$parts['month']; 
      $d=$parts['day']; 
      $y=$parts['year']; 
     } 
     if($m!==false && $d!==false) 
     { 
      if($y===false) $y=date('Y'); //Default to this year 
      //Try for a specific date - this catches bad entries like 'feb 31, 2000' 
      if(checkdate($m,$d,$y)) $result=sprintf('%04d-%02d-%02d',$y,$m,$d); 
     } 
     else 
     { 
      //Try for something more generic - this allows entries like 'next thursday' 
      $dt=false; 
      try{ $dt=new \DateTime($date); }catch(\Exception $e){ $dt=false; } 
      if($dt!==false) $result=$dt->format('Y-m-d'); 
     } 
    } 
    return $result; 
} 
3
<?php 
function validateDate($date, $format = 'Y-m-d H:i:s'){ 
    $d = DateTime::createFromFormat($format, $date); 
    return $d && $d->format($format) == $date; 
} 
?> 

var_dump(validateDate('2012-02-28 12:12:12')); # true 
var_dump(validateDate('2012-02-30 12:12:12')); # false 
var_dump(validateDate('2012-02-28', 'Y-m-d')); # true 
var_dump(validateDate('28/02/2012', 'd/m/Y')); # true 
var_dump(validateDate('30/02/2012', 'd/m/Y')); # false 

fonksiyonu ** açılır menüler bu answer veya php.net