web-dev-qa-db-fra.com

Convertir les secondes en une durée lisible par l'homme

Comment convertir au mieux 90060 (secondes) en une chaîne de "25h 1m"?

Actuellement, je fais cela 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;

Mais je ne suis pas sûr que ce soit la méthode la plus pratique :-)

Je suis ouvert aux suggestions pour le faire à la fois en SQL (différemment que je le fais déjà) ou en PHP.

ÉDITER:

Exemples de chaînes souhaitées: "5m", "40m", "1h 35m", "45h" "46h 12m".

21
Henno
TIME_FORMAT(SEC_TO_TIME(task_records.time_spent),'%Hh %im')

La documentation est votre amie:


Selon le commentaire:

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 ;

Usage:

SELECT GET_HOUR_MINUTES(task_records.time_spent) FROM table
50
Peter

vous pouvez utiliser la fonction prédéfinie sec_to_time ()

sec_to_time (nombre_de_secondes)

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_sec-to-time

3
rrawat