2010-05-14 20 views

Respuesta

5

de Check strtotime -función para convertir su fecha fija/hora para una marca de tiempo de PHP: http://php.net/manual/en/function.strtotime.php

Si strtotime no puede manejar el formato de fecha/hora correctamente ("16:00" probablemente va a funcionar, pero no "en 4PM "), necesitará usar funciones de cadena, por ej. substr para analizar/corregir su formato y recuperar su marca de tiempo a través de otra función, p. mktime.

Luego compare la marca de tiempo resultante con la fecha/hora actual (if ($calulated_timestamp > time()) { /* date in the future */ }) para ver si la fecha/hora establecida es anterior o futura.

Le sugiero que lea el documento PHP-doc sobre funciones de fecha/hora y regrese aquí con parte de su código fuente una vez que se quede atascado.

+0

ver de Ivar Koster respuesta –

176

A partir de PHP> = 5.2.0 se puede utilizar la clase DateTime como tal:

if (new DateTime() > new DateTime("2010-05-15 16:00:00")) { 
    # current time is greater than 2010-05-15 16:00:00 and thus in the past 
} 

La cadena que se pasa a la DateTime constructor se analiza according to these rules.


Tenga en cuenta que también es posible utilizar time y strtotime funciones. See original answer.

+4

marca de tiempo tiene algunas limitaciones de yerba mate y algunos insectos también, por ejemplo, una marca de tiempo no puede manejar una fecha antes de 1970 y después de 2038 (ver la respuesta de Ivar Koster) –

+0

¡respuesta increíble! :) –

+0

A menudo vemos un abuso del nuevo DateTime() sin parámetro, si está usando fechas UTC (como debería), prefiere usar el nuevo DateTime ("ahora", el nuevo DateTimeZone ('UTC')). Esto evitará que su aplicación presente errores en las fechas. te aconsejo que lo guardes en una variable estática de función, una clase estática o en otro lugar en tu proceso en ejecución ... – Loenix

75

También existe la clase DateTime que implementa una función para operadores de comparación.

// $now = new DateTime(); 
$dtA = new DateTime('05/14/2010 3:00PM'); 
$dtB = new DateTime('05/14/2010 4:00PM'); 

if ($dtA > $dtB) { 
    echo 'dtA > dtB'; 
} 
else { 
    echo 'dtA <= dtB'; 
} 
+0

¿Qué función implementa para esto? –

6

El rango de objetos dateTime es de unos 292 mil millones de años en el pasado a la misma en el futuro. La función de marca de tiempo tiene un límite (comienza desde 1970 hasta 2038 si mal no recuerdo).

1

que tenía un problema con esta fecha la comparación y necesitar algún ajuste

function getDatetimeNow() { 
    $tz_object = new DateTimeZone('Europe/Belgrade'); 
    $datetime = new DateTime(); 
    $datetime->setTimezone($tz_object); 
    return $datetime->format('Y\-m\-d\ h:i:s'); 
} 

$currentDate = getDatetimeNow(); 

$dtA = new DateTime($currentDate); 
$dtB = new DateTime($date); 

if ($dtA > $dtB) { 
    $active = 0; 
    return $active; 
} 
else { 
    $active = 1; 
    return $active; 
} 
Cuestiones relacionadas