2012-07-13 53 views
10

Usando PHP ¿cómo se obtiene el número de segundos transcurridos desde la medianoche del día actual?Cómo obtener segundos transcurridos desde la medianoche

Todo lo que he probado en este momento es:

$hour=substr(date("h:i:s"),0,2); 
$minute=substr(date("h:i:s"),3,2); 
echo $hour."\r\n"; 
echo $minute."\r\n"; 

... pero no devuelve la hora del servidor correcto de la respuesta y no sé cómo hacerlo.

+3

¿A dónde se atasque en esto? ¿Qué has intentado? – azhrei

+0

Todo lo que he intentado en este momento es $ hour = substr (date ("h: i: s"), 0,2); $ minute = substr (date ("h: i: s"), 3,2); echo $ hour. "\ R \ n"; echo $ minute. "\ R \ n"; pero no devuelve el tiempo correcto del servidor de la respuesta y no sé cómo hacerlo. Estoy utilizando una solicitud GET en otro lugar y estoy tratando de obtener mi script php para devolver el número de segundos transcurridos desde la medianoche del día actual – Nubcake

+0

Mira aquí: http://stackoverflow.com/a/479147 –

Respuesta

24

Esto debería funcionar.

echo time() - strtotime("today"); 

Esto solo mostrará la zona horaria de los servidores.

2

en base a su comentario, si está recibiendo el tiempo como una cadena y desea calcular el número de segundos desde entonces:

$time = strtotime($_GET['time']); // Do some verification before this step 
$midnight = strtotime("00:00"); // Midnight measured in seconds since Unix Epoch 
$sinceMidnight = $time - $midnight; // Seconds since midnight 

Hay que ir. Lea en la función time() de PHP y strtotime().

+0

¿Cómo funcionaría eso con un tiempo de una respuesta como 01:28:49? ¿Sustituyo 00:00 con la hora del servidor? – Nubcake

+0

No. 00:00 es medianoche, y luego resta la hora actual para obtener el tiempo desde la medianoche en segundos. ¿Esa es tu pregunta? – Tushar

+0

Permítanme intentar explicarlo más simple, lo siento, estoy usando una solicitud GET y en esa respuesta del servidor obtendrá la sección Fecha: decir si la hora (de esa sección) es 01:35:33, cómo calcula el número de segundos transcurridos desde la medianoche de ese momento, olvidé agregar eso en el PO. – Nubcake

1
echo time() - strtotime('today'); 
12

más simple que creo que sería dividir la hora actual (en segundos) por el número de segundos en un día (60 * 60 * 24) y tomando el resto:

(time() % 86400) 
+2

Agradable, pero cuenta segundos desde la medianoche * UTC *, no la hora local – aross

+1

Es cierto que utiliza la época de Linux en GMT/UTC - Supongo que nunca ha sido un problema para mí, ya que utilizo UTC para todo de todos modos. – Wranorn

+2

"Estaré en casa alrededor de la medianoche cariño" * parloteo fuerte en el otro extremo *, "No cariño, eh, significaba la medianoche * UTC *!" ;) – aross

2
echo (date('G') * 3600 + date('i') * 60); 

Multiplique la hora actual por la cantidad de segundos en cada hora y agréguela a la cantidad de minutos multiplicada por la cantidad de segundos en cada minuto.

+0

Pero eso lo redondea al minuto más cercano. –

1

Creo que desea obtener tiempo desde el inicio del día hasta los horarios y segundos del día, esto se puede hacer así, aún deberá configurar el horario de su zona horaria en lugar de 'Asia/Karachi'. Este obtiene el tiempo correcto desde la medianoche en la zona horaria del usuario en lugar del tiempo de la zona horaria del servidor.

aquí es vínculo de trabajo: http://codepad.viper-7.com/ykJC2R

//Get current time timestamp 
$time_now = time(); 

//Create DateTime class object 
$date = new DateTime(); 

//Set timestamp to DateTime object 
$date->setTimestamp($time_now); 

//Set timezone so that code don't get server's timezone midnight time 
$date->setTimezone(new DateTimeZone('Asia/Karachi')); 

//Print current time in user's timezone 
echo $date->format('Y-m-d H:i') . "<br />"; 

//Get time stamp for midnight tonight 
$date->modify('today midnight'); 
$midnight_time = $date->getTimestamp(); 

//Print midnight time in user's timezone 
echo $date->format('Y-m-d H:i') . "<br />"; 

    //Now you will need to subtract midnight time from current time in user's timezone 
$seconds_since_midnight = $time_now - $midnight_time; 

//Print seconds since midnight in your timezone 
echo $seconds_since_midnight; 
1

La solución más corto probablemente sería la siguiente:

$time = "12:34:56"; 
echo strtotime("{$time}UTC", 0); 

La razón por la que esto funciona es que strtotime utiliza el segundo parámetro para determinar la fecha parte de la cadena de tiempo. En este caso, estoy usando 0, lo que significa que la cadena completa da como resultado 1970-01-01 12:34:56 UTC. strtotime luego devuelve la marca de tiempo UNIX (la cantidad de segundos transcurridos desde 1970-01-01 00:00:00 UTC). Nota: el primer parámetro tiene UTC adjunto para evitar que el tiempo se interprete como local.

1

Si está utilizando DateTime:

$timeDiff = $time->diff(new \DateTime("today")); 
$timeDiffSec = $timeDiff->h* 3600 + $timeDiff->i*60 + $timeDiff->s; 
0

En carbono, el número de segundos transcurridos desde la media noche se puede encontrar la siguiente manera:

$seconds_since_midnight = $dt->secondsSinceMidnight();

Y aunque no hay minutos desde la medianoche supongo que haces:

$minutes_since_midnight = (int) floor($dt->secondsSinceMidnight()/60);

Cuestiones relacionadas