web-dev-qa-db-ja.com

秒を人間が読める時間に変換する

90060(秒)を「25h 1m」の文字列に変換するにはどうすればよいですか?

現在、私は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;

しかし、それが最も便利な方法であるかどうかはわかりません:-)

SQL(私が既に行っているのとは異なる)またはPHPの両方でこれを行うための提案を受け入れています。

編集:

目的の文字列の例:「5m」、「40m」、「1h 35m」、「45h」、「46h 12m」。

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

ドキュメントはあなたの友達です:


コメントによると:

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 ;

使用法:

SELECT GET_HOUR_MINUTES(task_records.time_spent) FROM table
50
Peter

定義済みの関数sec_to_time()を使用できます

sec_to_time(number_of_seconds)

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

3
rrawat