2011-02-12 13 views
6

Si la fecha se envía por formulario en el siguiente formato, $month=2, $day=31, $year= 2010. ¿Cómo puedo verificar el uso de la función de fecha de PHP si es válida o no? Gracias.cómo validar la fecha con PHP

+0

fechas a través de la introducción de texto ** ** ** campos o menús desplegables **? Normalmente, para cualquier fecha, recomiendo ** menús desplegables **, ya que puede ser una forma muy fácil y simple de verificar y validar la fecha. – Eli

+6

@Eli ¿Cómo? Cualquiera puede editar valores en un menú desplegable usando firebug o chrome inspector. Deberías _ siempre_ validar los datos provenientes de un navegador. – Samuel

+0

Lo siento, debería haber sido más claro. La validación de duelo es siempre la mejor. (HTML/JavaScript/etc.) para la validación previa a la presentación de la página y la verificación del formato de fecha para el usuario normal y la validación del lado del servidor para el saneamiento antes del procesamiento. – Eli

Respuesta

13

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

La función checkdate es el primer resultado de Google de la búsqueda "fecha de php Validar"

En su caso, el uso sería:

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

Y la mejor solución – RobertPitt

+1

¡Gracias por publicar su respuesta! Tenga en cuenta que debe publicar las partes esenciales de la respuesta aquí, en este sitio, o su publicación corre el riesgo de ser eliminada Consulte las preguntas frecuentes donde se mencionan las respuestas que son 'apenas más que un enlace'. Puede incluir el enlace si lo desea, pero solo como una "referencia". La respuesta debería ser independiente sin necesidad del enlace. –

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

Esto es lo que he llegado con combinar el rigor de checkdate() con la comodidad de DateTime (Convierte entradas como 'el próximo jueves' o ' 2 semanas atrás ')

Si la cadena de entrada no es válida, devuelve falso. Las fechas vacías se devuelven como nulas, y las fechas no vacías se formatean estilo MySQL 'Y-m-d'.

/** 
* @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 

función fue copiado de esta se ingresan answer o php.net