mysql time duration

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; }



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