我需要将任意数量的毫秒转换为Days,Hours,Minutes Second.
例如: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
.
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"
图书馆是有帮助的,但为什么在你可以重新发明轮子时使用图书馆!:)
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有一个DurationFormatUtils,它有非常有用的方法,比如formatDurationWords.
你应该使用你正在使用的任何语言的日期时间函数,但是,这里只是为了好玩的代码:
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;