시간 밀리 초를 JavaScript에서 시간, 분, 초 형식으로 변환하는 방법은 무엇입니까?


87

시간은 밀리 초이지만 변환 후 시간이 필요합니다 00:00:00.

예 : 밀리 초 단위 = 86400000. 그 밀리 초에서 몇 시간을 원합니다.00:00:00

JavaScript로 가져 오는 방법?

답변:


123

아래와 같이 자바 스크립트에서 함수를 생성하여이 작업을 수행하는 것은 어떻습니까?

function msToTime(duration) {
  var milliseconds = parseInt((duration % 1000) / 100),
    seconds = Math.floor((duration / 1000) % 60),
    minutes = Math.floor((duration / (1000 * 60)) % 60),
    hours = Math.floor((duration / (1000 * 60 * 60)) % 24);

  hours = (hours < 10) ? "0" + hours : hours;
  minutes = (minutes < 10) ? "0" + minutes : minutes;
  seconds = (seconds < 10) ? "0" + seconds : seconds;

  return hours + ":" + minutes + ":" + seconds + "." + milliseconds;
}
console.log(msToTime(300000))


밀리 초를 시간 : 분 : 초 형식으로 변환하는 데이 방법을 사용했지만 올바르게 얻지 못했습니다. 모든 밀리 초에 21:11:05 만 제공됩니다. 어떻게 구현할 수 있습니까?
cheliyan 2013

1
var s = st_date + ''+ start; var e = end_date + ''+ end; var bits = s.split (/ \ D /); var bits1 = e.split (/ \ D /); var date = new Date (bits [0], --bits [1], bits [2], bits [3], bits [4], bits [5]); var date1 = new Date (bits1 [0], --bits1 [1], bits1 [2], bits1 [3], bits1 [4], bits1 [5]);
cheliyan 2013

var t1 = date.getTime () var t2 = date1.getTime () var t3 = date1.getTime ()-date.getTime (); var 초; var 분; var milliseconds = parseInt ((t3 % 1000) / 100), 초 = parseInt ((t3 / 1000) % 60), 분 = parseInt ((t3 / (1000 * 60)) % 60), 시간 = parseInt ((t3 / (1000 * 60 * 60)) % 24); 시간 = (시간 <10)? "0"+ 시간 : 시간; 분 = (분 <10)? "0"+ 분 : 분; 초 = (초 <10)? "0"+ 초 : 초; 기간 = 시간 + ":"+ 분 + ":"+ 초; alert ( 'dur ::'+ t3); alert ( '기간 :'+ 기간);
cheliyan 2013

6
parseInt (string)은 최적의 플로어링 방법이 아닙니다. 예를 들어 typescript에서는 사용할 수 없습니다. 또한 왜 ms / 100입니까? 이것은 전혀 좋은 대답이 아닙니다.
Dominik

1
jsperf.com/test-parseint-and-math-floor 층은 빠른에서는 parseInt보다 훨씬입니다
마티유 Riegler

53

시간을 밀리 초 단위로 사람이 읽을 수있는 형식으로 변환합니다.

 function timeConversion(millisec) {

        var seconds = (millisec / 1000).toFixed(1);

        var minutes = (millisec / (1000 * 60)).toFixed(1);

        var hours = (millisec / (1000 * 60 * 60)).toFixed(1);

        var days = (millisec / (1000 * 60 * 60 * 24)).toFixed(1);

        if (seconds < 60) {
            return seconds + " Sec";
        } else if (minutes < 60) {
            return minutes + " Min";
        } else if (hours < 24) {
            return hours + " Hrs";
        } else {
            return days + " Days"
        }
    }

"출력 샘플"


4
나는 이것이 가장 유용하다는 것을 알았고, 최고의 대답은 내 테스트에서 시간을 잘 처리하지 못하는 것 같았으며 이것은 또한 당신에게 일의 옵션을 제공합니다.
ak85

22

나는 똑같은 문제가 있었고 이것이 결국 내가했던 것입니다.

function parseMillisecondsIntoReadableTime(milliseconds){
  //Get hours from milliseconds
  var hours = milliseconds / (1000*60*60);
  var absoluteHours = Math.floor(hours);
  var h = absoluteHours > 9 ? absoluteHours : '0' + absoluteHours;

  //Get remainder from hours and convert to minutes
  var minutes = (hours - absoluteHours) * 60;
  var absoluteMinutes = Math.floor(minutes);
  var m = absoluteMinutes > 9 ? absoluteMinutes : '0' +  absoluteMinutes;

  //Get remainder from minutes and convert to seconds
  var seconds = (minutes - absoluteMinutes) * 60;
  var absoluteSeconds = Math.floor(seconds);
  var s = absoluteSeconds > 9 ? absoluteSeconds : '0' + absoluteSeconds;


  return h + ':' + m + ':' + s;
}


var time = parseMillisecondsIntoReadableTime(86400000);

alert(time);


17

이것은 유튜브 비디오처럼 시간을 반환합니다.

    function getYoutubeLikeToDisplay(millisec) {
        var seconds = (millisec / 1000).toFixed(0);
        var minutes = Math.floor(seconds / 60);
        var hours = "";
        if (minutes > 59) {
            hours = Math.floor(minutes / 60);
            hours = (hours >= 10) ? hours : "0" + hours;
            minutes = minutes - (hours * 60);
            minutes = (minutes >= 10) ? minutes : "0" + minutes;
        }

        seconds = Math.floor(seconds % 60);
        seconds = (seconds >= 10) ? seconds : "0" + seconds;
        if (hours != "") {
            return hours + ":" + minutes + ":" + seconds;
        }
        return minutes + ":" + seconds;
    }

산출:

  • getYoutubeLikeToDisplay (129900) = "2:10"
  • getYoutubeLikeToDisplay (1229900) = "20:30"
  • getYoutubeLikeToDisplay (21229900) = "05:53:50"

주석-예를 들어 -3000표시해야 -00:03하지만 반환 하는 부정적인 시간 동안 올바르게 작동하지 않습니다 -1:0-03.
anu

16

여기 내 해결책이 있습니다.

let h,m,s;
h = Math.floor(timeInMiliseconds/1000/60/60);
m = Math.floor((timeInMiliseconds/1000/60/60 - h)*60);
s = Math.floor(((timeInMiliseconds/1000/60/60 - h)*60 - m)*60);

// 00:00:00 시간 형식 가져 오기

s < 10 ? s = `0${s}`: s = `${s}`
m < 10 ? m = `0${m}`: m = `${m}`
h < 10 ? h = `0${h}`: h = `${h}`


console.log(`${s}:${m}:${h}`);

화려한. 감사합니다.
Andy

이 질문에 대한 가장 깨끗한 대답.
muad-dweeb

2
나는 삼항 연산자 외부에서 값을 s로 설정했습니다.s = `${s < 10 ? '0': ''}${s}`
seniorpreacher

9

미안 해요, 파티에 늦었어요. 받아 들여진 대답은 나를 위해 그것을 자르지 않았으므로 직접 작성했습니다.

산출:

2h 59s
1h 59m
1h
1h 59s
59m 59s
59s

코드 (Typescript) :

function timeConversion(duration: number) {
  const portions: string[] = [];

  const msInHour = 1000 * 60 * 60;
  const hours = Math.trunc(duration / msInHour);
  if (hours > 0) {
    portions.push(hours + 'h');
    duration = duration - (hours * msInHour);
  }

  const msInMinute = 1000 * 60;
  const minutes = Math.trunc(duration / msInMinute);
  if (minutes > 0) {
    portions.push(minutes + 'm');
    duration = duration - (minutes * msInMinute);
  }

  const seconds = Math.trunc(duration / 1000);
  if (seconds > 0) {
    portions.push(seconds + 's');
  }

  return portions.join(' ');
}

console.log(timeConversion((60 * 60 * 1000) + (59 * 60 * 1000) + (59 * 1000)));
console.log(timeConversion((60 * 60 * 1000) + (59 * 60 * 1000)              ));
console.log(timeConversion((60 * 60 * 1000)                                 ));
console.log(timeConversion((60 * 60 * 1000)                    + (59 * 1000)));
console.log(timeConversion(                   (59 * 60 * 1000) + (59 * 1000)));
console.log(timeConversion(                                      (59 * 1000)));

고마워요, 이것이 제가 원했던 것입니다. '0h 0m 10s'등을 보여주기 위해 약간 적응해야했지만 그렇지 않으면 깨끗하고
단순합니다

나는 내 자신의 글을 쓰기 시작했고, 누군가 이미 이것을했을 것이라고 생각했습니다. :). 감사합니다!
Ben S

6

위의 스 니펫은 1 일 이상인 경우에는 작동하지 않습니다 (단순히 무시 됨).

이를 위해 다음을 사용할 수 있습니다.

function convertMS(ms) {
    var d, h, m, s;
    s = Math.floor(ms / 1000);
    m = Math.floor(s / 60);
    s = s % 60;
    h = Math.floor(m / 60);
    m = m % 60;
    d = Math.floor(h / 24);
    h = h % 24;
    h += d * 24;
    return h + ':' + m + ':' + s;
}

여기에 이미지 설명 입력

https://gist.github.com/remino/1563878 덕분에


1
더 인간적인 출력을 얻으려면 다음과 같이 반환 할 수 있습니다. return ((h + '') .length === 1? '0'+ h : h) + ':'+ ( '0'+ m) .substr (- 2) + ':'+ ( '0'+ s) .substr (-2);
Vitall

@Vitall 그냥 사용하십시오 return (h < 10 ? "0" + h : h) + ":" + (m < 10 ? "0" + m : m) + ":" + (s < 10 ? "0" + s : s);. 왜냐하면 문자열 조작보다 수학으로 이것을하는 것이 더 낫기 때문입니다.
Mitch McMabers

3

나는 하루 24 시간까지만 시간이 필요했습니다.

const milliseconds = 5680000;

const hours = `0${new Date(milliseconds).getHours() - 1}`.slice(-2);
const minutes = `0${new Date(milliseconds).getMinutes()}`.slice(-2);
const seconds = `0${new Date(milliseconds).getSeconds()}`.slice(-2);

const time = `${hours}:${minutes}:${seconds}`
console.log(time);

필요한 경우 이런 식으로 날을 얻을 수도 있습니다.


3

이 솔루션은 하나 function를 사용 하여 밀리 초를으로 분할 parts object하고 다른 하나 function를 사용하여 parts object.

요청한대로 하나는 친숙한 문자열을 인쇄하고 단수 / 복수를 고려하고 밀리 초를 표시하는 옵션을 포함하는 두 가지 형식 함수를 만들었습니다.

function parseDuration(duration) {
  let remain = duration

  let days = Math.floor(remain / (1000 * 60 * 60 * 24))
  remain = remain % (1000 * 60 * 60 * 24)

  let hours = Math.floor(remain / (1000 * 60 * 60))
  remain = remain % (1000 * 60 * 60)

  let minutes = Math.floor(remain / (1000 * 60))
  remain = remain % (1000 * 60)

  let seconds = Math.floor(remain / (1000))
  remain = remain % (1000)

  let milliseconds = remain

  return {
    days,
    hours,
    minutes,
    seconds,
    milliseconds
  };
}

function formatTime(o, useMilli = false) {
  let parts = []
  if (o.days) {
    let ret = o.days + ' day'
    if (o.days !== 1) {
      ret += 's'
    }
    parts.push(ret)
  }
  if (o.hours) {
    let ret = o.hours + ' hour'
    if (o.hours !== 1) {
      ret += 's'
    }
    parts.push(ret)
  }
  if (o.minutes) {
    let ret = o.minutes + ' minute'
    if (o.minutes !== 1) {
      ret += 's'
    }
    parts.push(ret)

  }
  if (o.seconds) {
    let ret = o.seconds + ' second'
    if (o.seconds !== 1) {
      ret += 's'
    }
    parts.push(ret)
  }
  if (useMilli && o.milliseconds) {
    let ret = o.milliseconds + ' millisecond'
    if (o.milliseconds !== 1) {
      ret += 's'
    }
    parts.push(ret)
  }
  if (parts.length === 0) {
    return 'instantly'
  } else {
    return parts.join(' ')
  }
}

function formatTimeHMS(o) {
  let hours = o.hours.toString()
  if (hours.length === 1) hours = '0' + hours

  let minutes = o.minutes.toString()
  if (minutes.length === 1) minutes = '0' + minutes

  let seconds = o.seconds.toString()
  if (seconds.length === 1) seconds = '0' + seconds

  return hours + ":" + minutes + ":" + seconds
}

function formatDurationHMS(duration) {
  let time = parseDuration(duration)
  return formatTimeHMS(time)
}

function formatDuration(duration, useMilli = false) {
  let time = parseDuration(duration)
  return formatTime(time, useMilli)
}


console.log(formatDurationHMS(57742343234))

console.log(formatDuration(57742343234))
console.log(formatDuration(5423401000))
console.log(formatDuration(500))
console.log(formatDuration(500, true))
console.log(formatDuration(1000 * 30))
console.log(formatDuration(1000 * 60 * 30))
console.log(formatDuration(1000 * 60 * 60 * 12))
console.log(formatDuration(1000 * 60 * 60 * 1))


3

사람이 읽을 수있는 출력을위한 사람이 읽을 수있는 코드이며이를 광년 또는 나노초 또는 매우 직관적으로 가지고있는 것으로 확장 할 수 있습니다. 분명히 이것을 함수로 변환하고 중간 모듈로 호출 중 일부를 재사용하고 싶을 것입니다.

second = 1000 
minute = second * 60
hour = minute * 60 
day = hour * 24

test = 3 * day + 2 * hour + 11 * minute + 58 * second

console.log(Math.floor(test / day))
console.log(Math.floor(test % day / hour))
console.log(Math.floor(test % day % hour / minute))
console.log(Math.floor(test % day % hour % minute / second))

2

@Chand 답변을 기반으로합니다. 이것은 Typescript의 구현입니다. JS에서 유형을 강제하는 것보다 조금 더 안전합니다. 유형 주석을 제거하면 유효한 JS이어야합니다. 또한 새로운 문자열 함수를 사용하여 시간을 정규화합니다.

function displayTime(millisec: number) {
 const normalizeTime = (time: string): string => (time.length === 1) ? time.padStart(2, '0') : time;

 let seconds: string = (millisec / 1000).toFixed(0);
 let minutes: string = Math.floor(parseInt(seconds) / 60).toString();
 let hours: string = '';

 if (parseInt(minutes) > 59) {
   hours = normalizeTime(Math.floor(parseInt(minutes) / 60).toString());
   minutes = normalizeTime((parseInt(minutes) - (parseInt(hours) * 60)).toString());
 }
 seconds = normalizeTime(Math.floor(parseInt(seconds) % 60).toString());

 if (hours !== '') {
    return `${hours}:${minutes}:${seconds}`;
 }
   return `${minutes}:${seconds}`;
}

1
누군가 유용하다고 생각할 수 있습니다.
KevinOrfas

1
JS는 TypeScript로 진화하고 있습니다. 이것은 곧 유효한 JS가 될 것입니다. :-)
N8allan

2

나를 위해 일했다

msToTime(milliseconds) {
    //Get hours from milliseconds
    var hours = milliseconds / (1000*60*60);
    var absoluteHours = Math.floor(hours);
    var h = absoluteHours > 9 ? absoluteHours : '0' + absoluteHours;

    //Get remainder from hours and convert to minutes
    var minutes = (hours - absoluteHours) * 60;
    var absoluteMinutes = Math.floor(minutes);
    var m = absoluteMinutes > 9 ? absoluteMinutes : '0' +  absoluteMinutes;

    //Get remainder from minutes and convert to seconds
    var seconds = (minutes - absoluteMinutes) * 60;
    var absoluteSeconds = Math.floor(seconds);
    var s = absoluteSeconds > 9 ? absoluteSeconds : '0' + absoluteSeconds;

    return h == "00" ? m + ':' + s : h + ':' + m + ':' + s;
}

1

내 솔루션

var sunriseMills = 1517573074000;         // sunrise in NewYork on Feb 3, 2018  - UTC time
var offsetCityMills = -5 * 3600 * 1000;   // NewYork delay to UTC 
var offsetDeviceMills =  new Date().getTimezoneOffset() * 60 * 1000 ;  // eg. I live in Romania (UTC+2) >> getTimezoneOffset() = 120

var textTime = new Date(sunriseMills + offsetCityMills + offsetDeviceMills) 
    .toLocaleTimeString('en-US', { hour: 'numeric', minute: 'numeric' });

textTime은 ' 7.04 AM '이됩니다.


1

@Rick의 대답을 확장하면 다음과 같은 것을 선호합니다.

function msToReadableTime(time){
  const second = 1000;
  const minute = second * 60;
  const hour = minute * 60;

  let hours = Math.floor(time / hour % 24);
  let minutes = Math.floor(time / minute % 60);
  let seconds = Math.floor(time / second % 60);
 

  return hours + ':' + minutes + ":" + seconds;
}

0

타이프 스크립트를 사용한다면 이것은 당신에게 좋은 일이 될 수 있습니다.

enum ETime {
  Seconds = 1000,
  Minutes = 60000,
  Hours = 3600000,
  SecInMin = 60,
  MinInHours = 60,
  HoursMod = 24,
  timeMin = 10,
}

interface ITime {
  millis: number
  modulo: number
}

const Times = {
  seconds: {
    millis: ETime.Seconds,
    modulo: ETime.SecInMin,
  },
  minutes: {
    millis: ETime.Minutes,
    modulo: ETime.MinInHours,
  },
  hours: {
    millis: ETime.Hours,
    modulo: ETime.HoursMod,
  },
}

const dots: string = ":"

const msToTime = (duration: number, needHours: boolean = true): string => {
  const getCorrectTime = (divider: ITime): string => {
    const timeStr: number = Math.floor(
      (duration / divider.millis) % divider.modulo,
    )

    return timeStr < ETime.timeMin ? "0" + timeStr : String(timeStr)
  }

  return (
    (needHours ? getCorrectTime(Times.hours) + dots : "") +
    getCorrectTime(Times.minutes) +
    dots +
    getCorrectTime(Times.seconds)
  )
}

0

내 구현에서 Moment.js를 사용했습니다.

export default (value) => 
  const duration = moment.duration(value);

  const milliseconds = duration.milliseconds();
  const seconds = duration.seconds();
  const minutes = duration.minutes();
  const hours = duration.hours();
  const day = duration.days();

  const sDay = `${day}d `;
  const sHours = (hours < 10) ? `0${hours}h ` : `${hours}h `;
  const sMinutes = (minutes < 10) ? `0${minutes}' ` : `${minutes}' `;
  const sSeconds = (seconds < 10) ? `0${seconds}" ` : `${seconds}" `;
  const sMilliseconds = `${milliseconds}ms`;

  ...
}

현을 받으면 원하는대로 작곡했습니다.


0

1970 년 1 월 1 일 자정과 지정된 날짜 사이의 밀리 초 수를 반환하는 자바 스크립트 메소드 getTime ()을 사용하여 milliseconds = 1592380675409를 얻었으므로 저를 위해 일합니다.

var d = new Date();//Wed Jun 17 2020 13:27:55 GMT+0530 (India Standard Time)
var n = d.getTime();//1592380675409 this value is store somewhere

//function call 
console.log(convertMillisecToHrMinSec(1592380675409));

var convertMillisecToHrMinSec = (time) => {
  let date = new Date(time);
  let hr = date.getHours();
  let min = date.getMinutes();
  let sec = date.getSeconds();

  hr = (hr < 10) ? "0"+ hr : hr;
  min = (min < 10) ? "0"+ min : min;
  sec = (sec < 10) ? "0"+ sec : sec;

  return hr + ':' + min + ":" + sec;//01:27:55
}

코드를 설명하세요. 설명이없는 코드는 잘못된 코드입니다.
이슬람 Elshobokshy

제안 주셔서 감사합니다, 나는 확실히 내 솔루션을 설명
스 네하 Morye

0

// 다음은 Typescript로 작성되었으며 JS로 쉽게 번역 할 수 있어야합니다.

function humanReadableDuration(msDuration: int): string {
    const h = Math.floor(msDuration / 1000 / 60 / 60);
    const m = Math.floor((msDuration / 1000 / 60 / 60 - h) * 60);
    const s = Math.floor(((msDuration / 1000 / 60 / 60 - h) * 60 - m) * 60);

    // To get time format 00:00:00
    const seconds: string = s < 10 ? `0${s}` : `${s}`;
    const minutes: string = m < 10 ? `0${m}` : `${m}`;
    const hours: string = h < 10 ? `0${h}` : `${h}`;

    return `${hours}h ${minutes}m ${seconds}s`;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.