2014-12-20 4 views
6

मेरे पास एक php मेथोड है जो जांचता है कि पैरामीटर में पास किया गया है या नहीं। यहाँ यह है: तोis_date() खराब है

public function is_Date($str){ 
     if (is_numeric($str) || preg_match('^[0-9]^', $str)){ 
      $stamp = strtotime($str); 
      $month = date('m', $stamp); 
      $day = date('d', $stamp); 
      $year = date('Y', $stamp); 
      return checkdate($month, $day, $year); 
     } 
     return false; 
} 

, मैं इसे इस तरह से परीक्षण कर दिया:

$var = "100%"; 

if(is_Date($var)){ 
    echo $var.' '.'is a date'; 
} 

$var = "31/03/1970"; 

if(is_Date($var)){ 
    echo $var.' '.'is a date'; 
} 

$var = "31/03/2005"; 

if(is_Date($var)){ 
    echo $var.' '.'is a date'; 
} 

$var = "31/03/1985"; 

if(is_Date($var)){ 
    echo $var.' '.'is a date'; 
} 

नोट आईएफएस में से प्रत्येक के भी रूप में एक और को बयान किया है कि:

else{ 
    echo $var.' '.'is not a date' 
} 

उत्पादन:

100% is a Date 
31/03/1970 is a Date 
31/03/2005 is a Date 
31/03/1985 is a Date 

मेरी समस्या है, क्यों है एक तिथि के रूप में प्रदर्शित 100% और 31/03/1985 क्यों एक तारीख के रूप में नहीं पढ़ा जा रहा है?

क्यों के रूप में किसी भी सुराग अत्यधिक सराहना हो जाएगा के रूप में मैं भी Regex

+0

बस क्यों की जांच नहीं: 'is_numeric (strtotime (नई उत्पादन एक तारीख है, जो मैं क्या planned.here अंतिम कोड sippette कि काम करता है के रूप में 100% प्रदर्शित stoped है $ str)) '? – hjpotter92

+0

'^ [0-9] ^' में आपका क्या मतलब है? –

उत्तर

-1

मुझे अब यह काम मिल जाएगा!

public function is_Date($str){ 
 
     
 
     $str = str_replace('/', '-', $str);  
 
     $stamp = strtotime($str); 
 
     if (is_numeric($stamp)){ 
 
      
 
      $month = date('m', $stamp); 
 
      $day = date('d', $stamp); 
 
      $year = date('Y', $stamp); 
 
      
 
      return checkdate($month, $day, $year); 
 
       
 
     } 
 
     return false; 
 
    } 
 

 

 

 
echo a million thanks to you all ! you guys are the best !

+3

कृपया, एक ही जवाब जोड़ें मत। आपको [जवाब स्वीकार करना चाहिए] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) इसके बजाए। –

3

में विशेषज्ञता नहीं कर रहा हूँ आप regex स्ट्रिंग के अंत में ^ उपयोग कर रहे हैं, ^ का अर्थ तुलना करने के लिए स्ट्रिंग की शुरुआत है।

इसके अलावा, जैसा hjpotter92 सुझाव दिया, तो आप बस इस्तेमाल कर सकते हैं is_numeric(strtotime($str))

आपका समारोह तरह दिखना चाहिए: d/m/y में

public function is_Date($str){ 
    $str=str_replace('/', '-', $str); //see explanation below for this replacement 
    return is_numeric(strtotime($str))); 
} 

Documentation says:

तिथियां या dmy प्रारूप विभाजक को देखकर असंबद्ध हैं विभिन्न घटकों के बीच: यदि विभाजक एक स्लैश (/) है, तो अमेरिकी एम/डी/वाई माना जाता है; जबकि अगर विभाजक एक डैश (-) या एक बिंदु (।) है, तो यूरोपीय डी-एम-वाई प्रारूप माना जाता है।

+3

'^ 'ओपी डिलीमीटर थे, जिन्हें आप अपने' preg' फ़ंक्शन में भूल गए हैं। – hjpotter92

+0

@ hjpotter92, सुझाव के लिए धन्यवाद! –

+0

मुझे अब यह काम मिल जाएगा! नए आउटपुट ने एक तिथि के रूप में 100% प्रदर्शित करना बंद कर दिया है, जो मैंने योजना बनाई थी ......... –

संबंधित मुद्दे