Как преобразовать секунды во время в Javascript

#javascript #date

Вопрос:

Мне нужно преобразовать секунды в формат времени:

 seconds_1 = 540;
seconds_2 = -2820;

convert_1 = new Date(seconds_1 * 1000).toISOString().substr(11, 8);
convert_2 = new Date(seconds_2 * 1000).toISOString().substr(11, 8);

console.log(convert_1);
console.log(convert_2); 

он вернется,

 convert_1  : 00:09:00
convert_2 : 23:13:00
 

первый (convert_1) верен, но второй должен вернуться -00:47:00 .

Фактическая проблема заключается в том, что отрицательное значение неправильно преобразуется во время.

Пожалуйста, помогите.

Я попробовал это,

    function toTime(duration) {   
      // Hours, minutes and seconds
      var hrs = ~~(duration / 3600);
      var mins = ~~((duration % 3600) / 60);
      var secs = ~~duration % 60;
      let ret = hrs  ":"   mins   ":"   secs;
      return ret;
    }

seconds_1 = 540;
seconds_2 = -2820;

console.log(toTime(seconds_2 )); 

Комментарии:

1. Date Объект не является подходящим инструментом для этого, лучше всего просто разделить значение на секунды, минуты и часы, преобразовать их в строки, дополненные по 0 мере необходимости, а затем объединить их в строку вручную.

2. Нет такого времени, как -00:47:00 … вы имеете в виду преобразование секунд в минуты?

Ответ №1:

Прагматичное решение состоит в том, чтобы удалить знак, а затем добавить его снова:

 function toTime(seconds) {
    if (seconds < 0) return "-"   toTime(-seconds);
    return new Date(seconds * 1000).toISOString().substr(11, 8);
}

console.log(toTime(540));
console.log(toTime(-2820)); 

Комментарии:

1. Хорошенькая…….

Ответ №2:

Просто проверьте

 const convert = secs => { 
  const sign = secs < 0
  const hhmmss = new Date(Math.abs(secs) * 1000).toISOString().substr(11, 8);
  return sign ? '-'   hhmmss : hhmmss
}  
  

console.log(convert(540));
console.log(convert(-2820));