2010-02-24 19 views
7

Estoy escribiendo un sistema PHP y necesito obtener la hora del sistema. No es la hora GMT ni la hora específica de una zona horaria, sino la misma hora del sistema utilizada por el sistema CRON. Tengo un trabajo CRON que se ejecuta todos los días a la medianoche y quiero mostrar en una página web cuánto tiempo pasará antes de que se ejecute nuevamente.¿Cómo obtengo la hora del sistema local en PHP?

Por ejemplo: En este momento es 18:00 en mi reloj del sistema. Ejecuto el código:

$timeLeftUntilMidnight = date("H:i", strtotime("tomorrow") - strtotime("now")); 

El resultado, sin embargo, es "3:00" en lugar de "6:00". Si ejecuto

date("H:i", strtotime("tomorrow")); 

Devuelve 0:00, que es correcto. Pero si ejecuto

date("H:i", strtotime("now")); 

Devuelve 21:00, aunque el correcto debería ser 18:00.

Gracias.

+0

Déjame intentar aclarar: si ejecuto la fecha ("H: i", hora()), me mostrará un tiempo que es de 3 horas a partir de ahora. Por eso, strtotime ("mañana") - strtotime ("ahora") me da 3 horas menos de lo correcto. Por ejemplo, ahora son las 6 p.m., y el cronjob se ejecutará a las 12 a.m., pero strtotime ("mañana") - strtotime ("ahora") devolverá 3 horas, porque "mañana" es 00:00 pero "ahora" es 9 p.m. – JohnWithoutArms

+0

@JohnWithoutArms ¿Puedes actualizar tu publicación con este código, por favor? –

+0

Acabo de hacerlo, gracias. – JohnWithoutArms

Respuesta

5

php de time volverá la hora del sistema. puede darle formato con date

si lo que desea es mostrar la hora en la hora local del visitante tal vez es mejor usar un poco de javascript

+0

Intenté esto, la fecha ("H: i", hora()) devuelve la hora GMT, no la hora hora del sistema local. – JohnWithoutArms

+0

¿Estás seguro de que la hora del servidor no está configurada en GMT? ¿Tus trabajos cron se ejecutan en el mismo servidor que tus scripts php? – knittl

+0

El resultado de la llamada de la fecha ("H: i", tiempo()) es el mismo tanto en mi máquina de Windows (con reloj de sistema configurado en hora local) como en una máquina de Linux (comprobé la hora con "arriba", es la misma hora local que mi máquina con Windows). El resultado es la hora GMT (correcta), no la hora local. – JohnWithoutArms

0

time()

te dará la fecha y hora actual del sistema

Manual

devuelve la hora actual medida en el número de segundos desde el Epoch Unix (1 de enero 1.970 00:00:00 GMT).

+1

Sin embargo, time() devolverá PHP localtime, no el tiempo del sistema (máquina). – stivlo

0

Usted puede obtener la fecha/hora del servidor en el que se está ejecutando PHP usando la función time() - que va a devolver una marca de tiempo, que corresponde a la fecha y hora actual.

Es la hora del sistema, en ese servidor - el mismo que el utilizado por cron.

+2

time() devolverá el tiempo de PHP, no el tiempo de la máquina. – stivlo

0

Si desea que la hora GMT es posible que desee utilizar gmtstrftime(), que le dará la hora del sistema, pero como en GMT. Hay más información en http://us2.php.net/gmstrftime.

+1

La función time() IS me da la hora GMT; No quiero la hora GMT, quiero la hora actual del sistema. – JohnWithoutArms

0

Si estás después de una fecha formateada:

date ('d/m/y h:i:s'); 

hará el truco, no hay necesidad de pasar el tiempo() en la fecha ya que por defecto la hora actual del sistema si no se suministra segundo parámetro .

para más opciones de formato ver aquí: http://php.net/manual/en/function.date.php

De lo contrario sólo puede utilizar

time() 

para conseguir que la fecha Unix actual como otros han mencionado.

+1

Entiendo que, el problema es que esa llamada a la fecha() me da la hora GMT, que es 3 horas antes de la hora de mi sistema. – JohnWithoutArms

+0

@JohnWithoutArms, ¿está seguro de que su sistema de servidor no está configurado en GMT? La fecha() sin argumentos debería darle la marca de tiempo actual del sistema, sin que haya ningún cambio de zona horaria. –

+0

Sí ... estaba probando en una máquina con Windows, y el tiempo en la bandeja es de hecho mi hora local, y no GMT. Pensando que esto podría ser un problema de Windows, obtuve mi código en un servidor Linux, verifiqué la hora con "arriba" (era la hora local correcta), ejecuté el código y los resultados fueron los mismos. – JohnWithoutArms

5

Hay muchas respuestas, sin embargo, ni siquiera hay una correcta al momento de escribir.

función de PHP time() no devuelve la hora del sistema, como la mayoría de la gente cree, pero devuelve la hora local de PHP, normalmente fijado con date.timezone en php.ini, o un conjunto con date_default_timezone_set() dentro de un script.

Por ejemplo, en uno de mis servidores, el tiempo de PHP se estableció en Europe/Rome y la hora del sistema en UTC. Tuve una diferencia de una hora entre el tiempo del sistema y el tiempo de PHP.

Voy a darle una solución que funcione para Linux, no sé para Windows. En Linux, la zona horaria del sistema se establece en /etc/timezone. Ahora, esto normalmente está fuera de mi configuración de open_basedir, pero puede agregar :/etc/timezone a su lista para poder leer el archivo.

Luego, en la parte superior de las secuencias de comandos, que desea obtener la hora del sistema, puede llamar a una función de biblioteca que establece la zona horaria del script en la zona horaria del sistema. Supongo que esta función es parte de una clase, así que utilizo estática:

static function setSystemTz() { 
    $systemTz = trim(file_get_contents("/etc/timezone")); 
    if ($systemTz == 'Etc/UTC') $systemTz = 'UTC'; 
    date_default_timezone_set($systemTz); 
} 

Para empeorar las cosas en PHP 5.3.3 'Etc/GMT' no se reconoce, mientras que 'UTC' es, por lo Tuve que agregar un if para arreglar eso.

Ahora puede felizmente llamar al time() y realmente le dará la hora del sistema. Lo probé, porque lo necesitaba para mí, es por eso que encontré esta pregunta ahora.

0

prueba este:

$time=date("h:i:s A", strtotime("now"-14)); 
echo $time; 

Se puede ajustar el tiempo cambiando el número 14 anteriormente.

0

Para obtener la hora actual de su sistema, necesita establecer el date.timezone correcto en su archivo php.ini. Por ejemplo, si usted es de la India, entonces usted escribiría:

date.timezone = Asia/Calcutta 

Para Alemania, sería:

date.timezone = Europe/Berlin 

Después de hacer esto, date("Y-m-d H:i:s") le dará a su tiempo actual. Para obtener su zona horaria, consulte el list of timezones supported by PHP.

0

Ésta es la forma más fácil y más infalible para hacerlo:

$sys_timestamp = strtotime(exec("date")); 

no vamos a tratar de suplantar con php, vamos a obtener el tiempo sys real;)

(funcionará en cualquier sistema basado en Unix)

0

Puede consultar la hora local actual a través de JavaScript y configurarla en cualquier variable de PHP que.

<script> 

     // For 24 hours  

     var ct = new Date(); 
     var hr = ct.getHours(); 
     var mt = ct.getMinutes(); 
     if (mt < 10) { 
      mt = "0" + mt; 
     } 
     document.write("<b>" + hr + ":" + mt + " " + "</b>");  


     // For 12 hours (AM/PM) 

     var ct = new Date(); 
     var hr = ct.getHours(); 
     var mt = ct.getMinutes(); 

     var ampm = "AM"; 

     if (hr >= 12) { 
      ampm = "PM"; 
      hr = hr - 12; 
     } 
     if (hr == 0) { 
      hr = 12; 
     } 
     if (mt < 10) { 
      mt = "0" + mt; 
     } 

     document.write("<b>" + hr + ":" + mt + " " + ampm + "</b>"); 

    </script> 
Cuestiones relacionadas