2011-08-17 20 views
8

me gustaría comprobar si la cadena tiene este formato de hora:¿Cómo verificar el formato de fecha de cadena en PHP?

Y-m-d H:i:s 

y si no que hacer algo de código, por ejemplo,

if here will be condition do { this } 
else do { this } 

¿Cómo hacer esta condición en PHP?

+0

También es esta entrada o algo? ¿Esto será utilizado por todos? Pregunto porque ¿por qué no solo crear la fecha? Entonces puede ser cualquier formato que desee. De lo contrario, como ya has adivinado, la expresión regular es la mejor manera. Sin embargo, todavía puede ser un inválido. Año bisiesto y qué no. – Matt

+0

En este caso voy a repetir una frase famosa: Algunas personas, cuando se enfrentan con un problema, piensan "Lo sé, usaré expresiones regulares". Ahora ellos tienen dos problemas. -Jamie Zawinski, siento que este es uno de esos casos. – Matt

+0

@Matt: las etiquetas regex fueron agregadas por mí, no por kaspernov – Mchl

Respuesta

0

La respuesta probablemente involucre regular expressions. Sugiero leer esta documentación y luego volver aquí si aún tienes problemas.

0

siempre se puede simplemente lo fuerza:

date('Y-m-d H:i:s',strtotime($str)); 
19

preg_match es lo que busca, específicamente:

if(preg_match('/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/',$date)){ 
    //dothis 
}else{ 
    //dothat 
} 

si solamente lo deseamos con el formato adecuado fecha, entonces

/\d{4}-[01]\d-[0-3]\d [0-2]\d:[0-5]\d:[0-5]\d/ 
16

No es así. Es imposible saber si es Y-m-d o Y-d-m, o incluso Y-d-d frente a Y-m-m. ¿Cuál es 2012-05-12? 12 de mayo o 5 de diciembre?

Pero, si usted está contento con eso, siempre se puede hacer:

// convert it through strtotime to get the date and back. 
if($dt == date('Y-m-d H:i:s',strtotime($dt))) 
{ 
    // date is in fact in one of the above formats 
} 
else 
{ 
    // date is something else. 
} 

Aunque es posible que desee ver si preg_match('/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/',$date) no es más rápido en esto. No lo he probado

+6

'Y-m-m':' 2012-05-12' ... Que el Decemberth de 2012. – cwallenpoole

+1

Mucho más elegante que una expresión regular en mi libro. –

3
if (preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/', $yourdate)) { 
    // it's in the right format ... 
} else { 
    // not the right format ... 
} 

en cuenta que esto sólo comprueba que la cadena de fecha se parece a un montón de dígitos separados por dos puntos y rayas. NO verifica las rarezas como '2011-02-31' (31 de febrero) o '99: 99: 99 'durante un tiempo (¿las 99 en punto?).

+0

Gracias esto resolvió mi problema sin tener que agregar otra pregunta. – Allerion

+0

funcionó para mí hoy. + 1 –

1

De php.net

aquí es una función de enfriamiento para validar una fecha y hora mysql:

<?php 
function isValidDateTime($dateTime) 
{ 
    if (preg_match("/^(\d{4})-(\d{2})-(\d{2}) ([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/", $dateTime, $matches)) { 
     if (checkdate($matches[2], $matches[3], $matches[1])) { 
      return true; 
     } 
    } 

    return false; 
} 
?> 
13

¿Cómo comprobar el formato de fecha de cadena en PHP?

if (DateTime::createFromFormat('Y-m-d G:i:s', $myString) !== FALSE) { 
echo 'true'; 
}                
+3

¿Por qué no está más arriba en la lista? –