2011-12-18 24 views
21

Si tengo una marca de tiempo de unix al azar, ¿cómo puedo redondearla a la medianoche de hoy o a la medianoche seleccionada por el usuario? La razón de esto es que quiero agregar horas y minutos después de la medianoche de un día determinado.marca de tiempo de unix alrededor de la medianoche

Por ejemplo, si la marca de tiempo es 1324189035, ¿cómo puedo eliminar las horas, los minutos y los segundos para poner la marca de tiempo en la medianoche de ese día.

+2

¿A medianoche de qué zona horaria? –

Respuesta

19
echo date('d-m-Y H:i:s', strtotime('today', 1324189035)); 
+0

perfecto. ¡Gracias! – user962449

+1

esto es hermoso. Había visto uno en el que alguien que pensaba fuera de la caja ponía '$ redondeadoStamp = $ time - ($ time% 86400);' y era inteligente pero no perfecto. Se redondea hacia arriba o hacia abajo dependiendo de lo que no funciona. Esto lo hace :) –

+0

Esto devolverá una cadena de fecha, debe agregar 'strtotime' para obtener la marca de la medianoche que debe envolver todo el código que se está copiando. –

16

Debido a la forma en que se está usando, no calcularía la medianoche en absoluto: es mucho más fácil de convertir simplemente lo que está añadiendo a la marca de tiempo en tiempo de 24 horas y luego usar strtotime:

echo strtotime("0:00",1324189035); // 1324184400 
echo strtotime("17:50",1324189035); // 1324248600 

y si usted quiere tener que legible directamente, utilice date y m/d/Y H:i:s:

echo date('m/d/Y H:i:s', strtotime('17:50',1324189035)); // 12/18/2011 17:50:00 
+0

Esta solución es muy elegante y agradable. Es necesario recordar que esto es todo GMT, por lo que para obtener 17:50 en cualquier otra zona horaria, la compensación de tiempo tendría que ser agregada antes de esta asignación de tiempo, y luego retomarse después (suponiendo que en última instancia está buscando un GMT/Hora UTC para buscar datos en una base de datos, por ejemplo). – Jason

+0

Parece que asigna la medianoche a * medianoche * anterior: 'eco strtotime (" 0:00 +0000 ", 1443441600);' imprime '1443398400' –

4

simplemente utilizar

strtotime('today midnight'); 
Cuestiones relacionadas