2011-05-03 17 views
6

strtotime() en PHP funciona muy bien si puede proporcionarle un formato de fecha que comprenda y pueda convertir, pero por ejemplo, le da una fecha en el Reino Unido que falla al proporcionar la marca de fecha y hora correcta de Unix.Función de PHP strtotime() que acepta un formato?

¿Existe alguna función de PHP, oficial o no oficial, que pueda aceptar una variable de formato que indique a la función en qué formato se está pasando la fecha y la hora?

Lo más cerca que he llegado a hacer esto es una mezcla de date_parse_from_format() y mktime()

// Example usage of the function I'm after 
//Like the date() function but in reverse 
$timestamp = strtotimeformat("03/05/2011 16:33:00", "d/m/Y H:i:s"); 

Respuesta

21

Si tiene PHP 5.3:

$date = DateTime::createFromFormat('d/m/Y H:i:s', '03/05/2011 16:33:00'); 
echo $date->getTimestamp(); 
+0

Estoy buscando devolver una marca de tiempo de unix no la fecha en otro formato de cadena. – Brady

+0

'getTimestamp' devuelve una marca de tiempo de unix ... – meze

+1

Pero' -> getTimestamp() 'devuelve una marca de tiempo de unix ... – Andrew

2

Usted está buscando strptime, creo. puede usarlo para analizar la fecha y luego usar mktime si necesita una marca de tiempo UNIX.

function strotimeformat($date, $format) { 
    $d = strptime($date, $format); 
    return mktime($d['tm_hour'], $d['tm_min'], $d['tm_sec'], 
       $d['tm_mon'], $d['tm_mday'], $d['tm_year']); 
} 

Esto funcionará con PHP 5.1 en adelante.

+0

no, yo no estoy, yo estoy buscando algo que devuelve una marca de tiempo Unix a una matriz de valores. Además strptime no está implementado en Windows, por lo que no es una solución ideal. – Brady

+0

Ok. He actualizado mi respuesta con una función para darle una marca de tiempo de todos modos (aún no funciona en Windows). Por supuesto, puede hacer algún trabajo de subcadena + strpos (o explotar + reorganizar + implosionar) para convertirlo en una fecha estadounidense. –

+0

Como mencioné en mi pregunta, ya estoy usando una combinación de 'date_parse_from_format()' y 'mktime()' de la misma manera que ha mostrado su código. 'date_parse_from_format()' funciona para todos los sistemas pero solo funciona en PHP 5.3> = wereas strptime funciona en una versión anterior pero no en Windows. Dejaré la pregunta abierta durante unos días para ver si hay alguna otra respuesta. – Brady

0

strtotime asume que es una fecha/hora de EE.UU. cuando se utiliza como separador /. Para que piense que es una fecha/hora en euros, use - o . como separador de fecha. Puede cambiar los / s - a s o s . con un simple str_replace()

+0

Lea la pregunta ... Estoy al tanto de lo que strtotime es capaz de hacer y cómo evitarlo. Pero eso no es lo que estoy pidiendo ... Estoy pidiendo una función que acepte una fecha en cualquier formato junto con una cadena que indique en qué formato está esa fecha y devolver una marca de tiempo de Unix. – Brady

Cuestiones relacionadas