mysql - Convertir segundos a tiempo de lectura legible por humanos
time duration (3)
¿Cómo convertiría mejor 90060 (segundos) a una cadena de "25h 1m"?
Actualmente estoy haciendo esto en SQL:
SELECT
IF(
HOUR(
sec_to_time(
sum(time_to_sec(task_records.time_spent))
)
) > 0,
CONCAT(
HOUR(sec_to_time(sum(time_to_sec(task_records.time_spent)))),
''h '',
MINUTE(sec_to_time(sum(time_to_sec(task_records.time_spent)))),
''m''
),
CONCAT(
MINUTE(sec_to_time(sum(time_to_sec(task_records.time_spent)))),
''m''
)
) as time
FROM myTable;
Pero no estoy seguro de que sea el método más conveniente :-)
Estoy abierto a sugerencias para hacer esto tanto en SQL (de manera diferente a como lo estoy haciendo) o en PHP.
EDITAR:
Ejemplos de cadenas deseadas: "5m", "40m", "1h 35m", "45h" "46h 12m".
intente esto: (ingrese su tiempo de segundos puros)
var hours = Math.floor(input/3600);
var minutes = Math.floor((input-hours*3600)/60);
var seconds = input-(minutes*60)-(hours*3600);
function convertTime(){
return hours":"minutes":"seconds;
}
puede utilizar la función predefinida sec_to_time ()
sec_to_time (número_de_segundos)
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_sec-to-time
TIME_FORMAT(SEC_TO_TIME(task_records.time_spent),''%Hh %im'')
La documentación es tu amiga:
Según el comentario:
DROP FUNCTION IF EXISTS GET_HOUR_MINUTES;
CREATE FUNCTION GET_HOUR_MINUTES(seconds INT)
RETURNS VARCHAR(16)
BEGIN
DECLARE result VARCHAR(16);
IF seconds >= 3600 THEN SET result = TIME_FORMAT(SEC_TO_TIME(seconds),''%kh %lm'');
ELSE SET result = TIME_FORMAT(SEC_TO_TIME(seconds),''%lm'');
RETURN result;
END
DELIMETER ;
Uso:
SELECT GET_HOUR_MINUTES(task_records.time_spent) FROM table