Me gustaría convertir una variable $uptime
que es segundos, en días, horas, minutos y segundos.
Ejemplo:
$uptime = 1640467;
El resultado debe ser:
18 days 23 hours 41 minutes
Esto se puede lograr con DateTime
clase.
Utilizar:
echo secondsToTime(1640467);
# 18 days, 23 hours, 41 minutes and 7 seconds
Función:
function secondsToTime($seconds) {
$dtF = new \DateTime('@0');
$dtT = new \DateTime("@$seconds");
return $dtF->diff($dtT)->format('%a days, %h hours, %i minutes and %s seconds');
}
@
significa cuando se pasa como argumento alDateTime
constructor?@
es la marca de tiempo de Unix.Esta es la función reescrita para incluir días. También cambié los nombres de las variables para que el código sea más fácil de entender ...
Fuente: CodeAid () - http://codeaid.net/php/convert-seconds-to-hours-minutes-and-seconds-(php)
fuente
Basado en la respuesta de Julián Moreno, pero cambiado para dar la respuesta como una cadena (no un arreglo), solo incluya los intervalos de tiempo requeridos y no asuma el plural.
La diferencia entre esta y la respuesta más votada es:
Por
259264
segundos, este código daríaPor
259264
segundos, la respuesta más votada (por Glavić) daríaEspero que esto ayude a alguien.
fuente
Aquí hay una función PHP simple de 8 líneas que convierte una cantidad de segundos en una cadena legible por humanos, incluida la cantidad de meses para grandes cantidades de segundos:
Función PHP seconds2human ()
fuente
El resultado será 19 23:41:07. Cuando es solo un segundo más que el día normal, aumenta el valor del día durante 1 día. Es por eso que muestra 19. Puede explotar el resultado para sus necesidades y solucionar este problema.
fuente
$uptime = gmdate("y m d H:i:s", 1640467); $uptimeDetail = explode(" ",$uptime); echo (string)($uptimeDetail[0]-70).' year(s) '.(string)($uptimeDetail[1]-1).' month(s) '.(string)($uptimeDetail[2]-1).' day(s) '.(string)$uptimeDetail[3];
Esto también le dará información sobre el año y el mes.Aquí hay algunas respuestas muy buenas, pero ninguna de ellas cubrió mis necesidades. Me basé en la respuesta de Glavic para agregar algunas características adicionales que necesitaba;
Puede ver una versión en ejecución del código here.
fuente
Corto, simple, confiable:
fuente
El enfoque más simple sería crear un método que devuelva un DateInterval de DateTime :: diff del tiempo relativo en $ segundos desde el tiempo actual $ ahora que luego puede encadenar y formatear. Por ejemplo:-
Ahora encadena tu llamada de método a DateInterval :: formato
Resultado:
fuente
Aunque es una pregunta bastante antigua, uno puede encontrar estos útiles (no escritos para ser rápidos):
resultado:
fuente
fuente
fuente
Solución que debe excluir valores 0 y establecer valores singulares / plurales correctos
fuente
una versión extendida de la excelente solución de Glavić , que tiene validación de enteros, soluciona el problema de 1 sy soporte adicional durante años y meses, a expensas de ser menos amigable con el análisis de computadoras en favor de ser más amigable para los humanos:
var_dump(secondsToHumanReadable(1*60*60*2+1));
->string(16) "2 hours 1 second"
fuente
Se puede utilizar la clase de intervalo que he escrito. También se puede utilizar de forma opuesta.
Más información aquí https://github.com/LubosRemplik/CakePHP-Interval
fuente
Con DateInterval :
fuente
Aquí hay un código que me gusta usar con el propósito de obtener la duración entre dos fechas. Acepta dos fechas y le da una buena respuesta estructurada en una oración.
Esta es una versión ligeramente modificada del código que se encuentra aquí .
Fuente: https://gist.github.com/ozh/8169202
fuente
Todo en una solución. No da unidades con ceros. Solo producirá el número de unidades que especifique (3 por defecto). Bastante largo, quizás no muy elegante. Las definiciones son opcionales, pero pueden resultar útiles en un gran proyecto.
Siéntase libre de votar en contra, pero asegúrese de probarlo en su código. Puede que sea lo que necesitas.
fuente
La solución para esta que usé (volviendo a los días mientras aprendía PHP) sin ninguna función integrada:
Aunque esta era una pregunta antigua, los nuevos estudiantes que se encuentren con esto, pueden encontrar esta respuesta útil.
fuente
fuente
Estoy editando uno de los códigos para que funcione bien cuando llegue un valor negativo.
floor()
La función no proporciona el recuento correcto cuando el valor es negativo. Entonces, necesitamos usar laabs()
función antes de usarla en lafloor()
función.$inputSeconds
La variable puede ser la diferencia entre la marca de tiempo actual y la fecha requerida.fuente
Una variación de la respuesta de @ Glavić: esta oculta los ceros iniciales para obtener resultados más cortos y usa plurales en los lugares correctos. También elimina la precisión innecesaria (por ejemplo, si la diferencia de tiempo es superior a 2 horas, probablemente no le importe cuántos minutos o segundos).
fuente
No sé por qué algunas de estas respuestas son ridículamente largas o complejas. Aquí hay uno que usa la clase DateTime . Algo similar a la respuesta de radzserg. Esto solo mostrará las unidades necesarias, y los tiempos negativos tendrán el sufijo 'ago' ...
EDITAR: Si desea condensar el ejemplo anterior para usar menos variables / espacio (a expensas de la legibilidad), aquí hay una versión alternativa que hace lo mismo:
fuente
$thetime
en el regreso, por ejemplo,isset($thetime)
El valor de $ proviene de la base de datos. Este código está en Codeigniter. $ SESSION se utiliza para almacenar suscripciones de usuarios. es obligatorio. Lo usé en mi caso, puedes usar lo que quieras.
fuente
$value
viene ¿Por qué queréis introducir una sesión? ¿Cómo devuelve esto la cadena adecuada durante segundos, minutos y horas?Esta es una función que utilicé en el pasado para restar una fecha de otra relacionada con su pregunta, mi principio era obtener cuántos días, horas, minutos y segundos quedan para que un producto caduque:
fuente