Подтвердить что ты не робот

Преобразование секунд в человеко-читаемое время

Как мне лучше всего преобразовать 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.

EDIT:

Примеры желаемых строк: "5m", "40m", "1h 35m", "45h" "46h 12m".

4b9b3361

Ответ 1

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

Ответ 3

попробуйте следующее: (введите время чистой секунды)

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