2010-12-01 12 views
50

¿Cómo se crea un DateTime a partir de la marca de tiempo en versiones inferiores a < 5.3?Creación de DateTime a partir de la marca de tiempo en PHP <5.3

En 5.3 sería:

$date = DateTime::createFromFormat('U', $timeStamp); 

El constructor DateTime quiere una cadena, pero esto no funcionó para mí

$date = new DateTime("@$timeStamp"); 
+1

Según el manual, que debería funcionar. ¿Has probado '$ date = new DateTime ('@'. $ TimeStamp);'? Y por "no funcionó", ¿qué quieres decir? – Jonah

+1

Definir * no funcionó para mí *. ¿Errores? ¿Fecha/hora incorrecta? –

+0

Error fatal: Excepción no detectada 'Excepción' con el mensaje 'DateTime :: __ construct() [datetime.--construct]: Error al analizar cadena de tiempo (@) en la posición 0 (@): carácter inesperado' – Yarin

Respuesta

3

las siguientes obras:

$dateString = date('Ymd', $timeStamp); 
$date = new DateTime($dateString); 
+0

esto no funciona :(cómo solucionarlo – user3501407

+0

Timestamp [1] no es solo Ymd, es el número de segundos (micro segundos en algunos casos) desde el 1 de enero de 1970 UTC. [1] = https: // en. wikipedia.org/wiki/Unix_time –

+0

Puede ser '$ dateString = date ('U', $ timeStamp);' then ?! – Pete

31

Suponiendo que desea la fecha y la hora y no solo la fecha como en la respuesta anterior:

$dtStr = date("c", $timeStamp); 
$date = new DateTime($dtStr); 

Parece bastante tonto tener que hacer eso sin embargo.

+0

Esta solución funciona, pero innecesariamente pasa el tiempo formateando la cadena de fecha y luego volviendo a analizar. – Jonah

11

No funciona porque su variable $ timeStamp está vacía. Intenta hacer eco del valor de $ timeStamp justo antes de crear DateTime y verás. Si ejecuta esto:

new DateTime('@2345234'); 

No obtiene un error. Sin embargo, si ejecuta:

new DateTime('@'); 

Produce el error exacto que dijo que le da. Tendrá que hacer algunas depuraciones y descubrir por qué $ timeStamp está vacío.

+0

Tenga cuidado , que al usar '@' en el constructor ignorará la zona horaria actual del entorno y la zona horaria cuando se suministre en el segundo argumento., incluso cuando se usa '$ dateTime-> modify ('@'. 1234)' use 'setTimezone (date_default_timezone_get()) 'para cambiar de la zona horaria UTC a la zona horaria del entorno. – fyrye

+0

Tuve el mismo problema cuando utilicé '@' con una marca de tiempo vacía, gracias por esta respuesta. El mensaje de error que dio PHP fue l Más que útil, implicaba que la '@' era el problema. – thomasrutter

38

PHP 5> = 5.2.0

$date = new DateTime(); 
$date->setTimestamp($timeStamp); 
+5

Creo que esto es PHP 5> = 5.3 – Spencer

+1

Incorrecto http://php.net/manual/en/datetime.settimestamp.php – DIMMSum

+0

Esta respuesta es incorect, setTimestamp() agregado en php 5.3 – Arkemlar

Cuestiones relacionadas