2012-06-11 19 views
11

¿Cómo se obtiene la fecha de hoy, como un objeto de fecha?cómo obtener la fecha/hora actual como un objeto de fecha en PHP

Estoy tratando de calcular la diferencia entre alguna fecha de inicio y hoy. Lo siguiente no funciona, porque getdate() devuelve una matriz y no un objeto de fecha:

$today = getdate();   
$start = date_create('06/20/2012'); 
$diff = date_diff($start, $today); 

echo($today . '<br/>' . $start . '<br/>' . $diff); 

Salida:

Array ([seconds] => 8 [minutes] => 1 [hours] => 16 [mday] => 11 [wday] => 1 [mon] => 6 [year] => 2012 [yday] => 162 [weekday] => Monday [month] => June [0] => 1339455668)

DateTime Object ([date] => 2012-06-20 00:00:00 [timezone_type] => 3 [timezone] => America/Los_Angeles)

Respuesta

33
new DateTime('now'); 

http://www.php.net/manual/en/datetime.construct.php

Comparando es fácil:

$today = new DateTime('now'); 
$newYear = new DateTime('2012-01-01'); 

if ($today > $newYear) { 

} 

Op edit Solo necesitaba llamar al date_default_timezone_set, y luego este código funcionó para mí.

+3

Creo que el explícito '$ today = new DateTime (" now ");' es más claro, incluso si el argumento predeterminado es "ahora". – jedwards

+0

El código * $ today = new DateTime ('now'); * arroja un error de algún tipo. (500 error de servidor interno) – McGarnagle

+1

@dbaseman ¿Puede ser más específico? ¿Qué versión de PHP estás ejecutando? http://codepad.org/5lYyo8MC –

0

Terminé usando el constructor date_create (sin parámetro) para obtener la fecha actual.

$diff = date_diff(date_create('06/20/2012'), date_create()); 
print_r($diff); 

Salida:

DateInterval Object ([y] => 0 [m] => 0 [d] => 8 [h] => 6 [i] => 30 [s] => 40 [invert] => 1 [days] => 8)

no tengo ni idea de por qué, pero la respuesta de Mike B (y cualquier constructor He intentado durante DateTime) arrojó un error para mí en PHP5/IIS.

+1

Me alegro de que hayas encontrado una solución. Si tiene curiosidad por saber por qué 'DateTime' no pudo crear instancias, puede intentar generar informes de errores. El error 500 es la manera que tiene IIS de decirle que PHP tiene errores pero no se vuelve mucho más específico. Puede poner en marcha el informe de errores colocando estas funciones al comienzo de su script: 'error_reporting (-1); ini_set ('display_errors', 1); ini_set ('display_startup_errors', 1); '. El registro de errores de IIS también puede contener mensajes de error específicos. –

+0

@MikeB gracias. Este fue el error: * No es seguro confiar en la configuración de la zona horaria del sistema. Debe utilizar la configuración date.timezone o la función date_default_timezone_set(). * Una vez que llamo * date_default_timezone_set *, su respuesta funciona. – McGarnagle

10

Para llegar diferencia en día utilizan este:

$today = new DateTime('today'); 

el tiempo en este objeto sea eill 00:00:00

Si desea diferencia con horas minutos y segundos utilice esto:

$now = new DateTime('now'); 
Cuestiones relacionadas