[date] 밀리 초를 사람이 읽을 수있는 형식으로 변환하는 방법은 무엇입니까?

임의의 밀리 초를 일, 시간, 분 초로 변환해야합니다.

예 : 10 일, 5 시간, 13 분, 1 초.



답변

글쎄요, 아무도 발을 들여 놓지 않았기 때문에 저는 이것을하기위한 쉬운 코드를 작성할 것입니다 :

x = ms / 1000
seconds = x % 60
x /= 60
minutes = x % 60
x /= 60
hours = x % 24
x /= 24
days = x

나는 당신이 며칠에 멈추고 몇 달을 요구하지 않았다는 것이 기쁩니다. 🙂

위의 경우 /정수 나누기 자르기 를 나타내는 것으로 가정합니다 . /부동 소수점 나누기를 나타내는 언어로이 코드를 사용하는 경우 필요에 따라 나누기 결과를 수동으로 잘라야합니다.


답변

A를 밀리 초로 설정합니다. 그런 다음 :

seconds=(A/1000)%60
minutes=(A/(1000*60))%60
hours=(A/(1000*60*60))%24

등 ( %은 모듈러스 연산자).

도움이 되었기를 바랍니다.


답변

아래의 두 솔루션 모두 javascript를 사용 합니다 (솔루션이 언어에 구애받지 않는지 몰랐습니다!). 기간을 캡처하는 경우 두 솔루션을 모두 확장해야합니다 > 1 month.

해결 방법 1 : Date 개체 사용

var date = new Date(536643021);
var str = '';
str += date.getUTCDate()-1 + " days, ";
str += date.getUTCHours() + " hours, ";
str += date.getUTCMinutes() + " minutes, ";
str += date.getUTCSeconds() + " seconds, ";
str += date.getUTCMilliseconds() + " millis";
console.log(str);

제공 :

"6 days, 5 hours, 4 minutes, 3 seconds, 21 millis"

도서관은 도움이되지만 바퀴를 재발 명 할 수 있는데 왜 도서관을 사용 하는가! 🙂

솔루션 2 : 자신 만의 파서 작성

var getDuration = function(millis){
    var dur = {};
    var units = [
        {label:"millis",    mod:1000},
        {label:"seconds",   mod:60},
        {label:"minutes",   mod:60},
        {label:"hours",     mod:24},
        {label:"days",      mod:31}
    ];
    // calculate the individual unit values...
    units.forEach(function(u){
        millis = (millis - (dur[u.label] = (millis % u.mod))) / u.mod;
    });
    // convert object to a string representation...
    var nonZero = function(u){ return dur[u.label]; };
    dur.toString = function(){
        return units
            .reverse()
            .filter(nonZero)
            .map(function(u){
                return dur[u.label] + " " + (dur[u.label]==1?u.label.slice(0,-1):u.label);
            })
            .join(', ');
    };
    return dur;
};

필요한 필드로 “기간”개체를 만듭니다. 타임 스탬프 포맷은 간단 해집니다.

console.log(getDuration(536643021).toString());

제공 :

"6 days, 5 hours, 4 minutes, 3 seconds, 21 millis"


답변

Apache Commons Lang 에는 formatDurationWords 와 같은 매우 유용한 메서드 가있는 DurationFormatUtils 가 있습니다 .


답변

사용하는 언어에 관계없이 datetime 함수를 사용해야하지만, 재미를 위해 코드는 다음과 같습니다.

int milliseconds = someNumber;

int seconds = milliseconds / 1000;

int minutes = seconds / 60;

seconds %= 60;

int hours = minutes / 60;

minutes %= 60;

int days = hours / 24;

hours %= 24;


답변

이것은 내가 쓴 방법입니다. 를 취하고 다음 integer milliseconds value을 반환합니다 human-readable String.

public String convertMS(int ms) {
    int seconds = (int) ((ms / 1000) % 60);
    int minutes = (int) (((ms / 1000) / 60) % 60);
    int hours = (int) ((((ms / 1000) / 60) / 60) % 24);

    String sec, min, hrs;
    if(seconds<10)  sec="0"+seconds;
    else            sec= ""+seconds;
    if(minutes<10)  min="0"+minutes;
    else            min= ""+minutes;
    if(hours<10)    hrs="0"+hours;
    else            hrs= ""+hours;

    if(hours == 0)  return min+":"+sec;
    else    return hrs+":"+min+":"+sec;

}


답변

function convertTime(time) {
    var millis= time % 1000;
    time = parseInt(time/1000);
    var seconds = time % 60;
    time = parseInt(time/60);
    var minutes = time % 60;
    time = parseInt(time/60);
    var hours = time % 24;
    var out = "";
    if(hours && hours > 0) out += hours + " " + ((hours == 1)?"hr":"hrs") + " ";
    if(minutes && minutes > 0) out += minutes + " " + ((minutes == 1)?"min":"mins") + " ";
    if(seconds && seconds > 0) out += seconds + " " + ((seconds == 1)?"sec":"secs") + " ";
    if(millis&& millis> 0) out += millis+ " " + ((millis== 1)?"msec":"msecs") + " ";
    return out.trim();
}