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」。
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
定義済みの関数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