我想将时间长度(即秒数)转换为冒号分隔的时间字符串(hh:mm:ss)。
我在这里找到了一些有用的答案,但它们都是关于转换为x小时和x分钟格式的。
那么有没有一个小片段可以在jQuery或纯JavaScript中实现此操作?
我想将时间长度(即秒数)转换为冒号分隔的时间字符串(hh:mm:ss)。
我在这里找到了一些有用的答案,但它们都是关于转换为x小时和x分钟格式的。
那么有没有一个小片段可以在jQuery或纯JavaScript中实现此操作?
这里是另一种版本,可以处理天数:
function FormatSecondsAsDurationString( seconds )
{
var s = "";
var days = Math.floor( ( seconds / 3600 ) / 24 );
if ( days >= 1 )
{
s += days.toString() + " day" + ( ( days == 1 ) ? "" : "s" ) + " + ";
seconds -= days * 24 * 3600;
}
var hours = Math.floor( seconds / 3600 );
s += GetPaddedIntString( hours.toString(), 2 ) + ":";
seconds -= hours * 3600;
var minutes = Math.floor( seconds / 60 );
s += GetPaddedIntString( minutes.toString(), 2 ) + ":";
seconds -= minutes * 60;
s += GetPaddedIntString( Math.floor( seconds ).toString(), 2 );
return s;
}
function GetPaddedIntString( n, numDigits )
{
var nPadded = n;
for ( ; nPadded.length < numDigits ; )
{
nPadded = "0" + nPadded;
}
return nPadded;
}
我认为在性能方面,这绝对是最快的:
var t = 34236; // your seconds
var time = ('0'+Math.floor(t/3600) % 24).slice(-2)+':'+('0'+Math.floor(t/60)%60).slice(-2)+':'+('0' + t % 60).slice(-2)
//would output: 09:30:36
现在有一种新的字符串方法: padStart
const str = '5';
str.padStart(2, '0'); // 05
以下是一个使用示例:JavaScript四行代码实现YouTube视频时长获取
const secondsToTime = (seconds, locale) => {
const date = new Date(0);
date.setHours(0, 0, seconds, 0);
return date.toLocaleTimeString(locale);
}
console.log(secondsToTime(3610, "en"));
其中语言环境参数("en"、"de"等)是可选的。
这是我最近为MM:SS写的一篇文章。虽然不完全符合问题,但是采用了不同的单行格式。
const time = 60 * 2 + 35; // 2 minutes, 35 seconds
const str = (~~(time / 60) + "").padStart(2, '0') + ":" + (~~((time / 60) % 1 * 60) + "").padStart(2, '0');
str // 02:35
编辑:这是为了增加多样性而添加的,但最好的解决方案在下面的https://dev59.com/JG015IYBdhLWcg3w7wMW#25279399。
这里有一个相当简单的解决方案,可以将时间舍入到最接近的秒数!
var returnElapsedTime = function(epoch) {
//We are assuming that the epoch is in seconds
var hours = epoch / 3600,
minutes = (hours % 1) * 60,
seconds = (minutes % 1) * 60;
return Math.floor(hours) + ":" + Math.floor(minutes) + ":" + Math.round(seconds);
}
正则表达式可以用于匹配从Date对象的toString()
方法返回的字符串中的时间子字符串,该字符串格式如下:"Thu Jul 05 2012 02:45:12 GMT+0100 (GMT Daylight Time)"。请注意,此解决方案使用自纪元以来的时间:1970年1月1日午夜。这个解决方案可以是一行代码,但将其分开使其更易于理解。
function secondsToTime(seconds) {
const start = new Date(1970, 1, 1, 0, 0, 0, 0).getTime();
const end = new Date(1970, 1, 1, 0, 0, parseInt(seconds), 0).getTime();
const duration = end - start;
return new Date(duration).toString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1");
}
以下是我是如何做到的。它似乎运行得相当不错,而且非常紧凑。(尽管使用了很多三元运算符)
function formatTime(seconds) {
var hh = Math.floor(seconds / 3600),
mm = Math.floor(seconds / 60) % 60,
ss = Math.floor(seconds) % 60;
return (hh ? (hh < 10 ? "0" : "") + hh + ":" : "") + ((mm < 10) && hh ? "0" : "") + mm + ":" + (ss < 10 ? "0" : "") + ss
}
......并用于格式化字符串......
String.prototype.toHHMMSS = function() {
formatTime(parseInt(this, 10))
};
HH:MM:SS
格式:var convertTime = function (input, separator) {
var pad = function(input) {return input < 10 ? "0" + input : input;};
return [
pad(Math.floor(input / 3600)),
pad(Math.floor(input % 3600 / 60)),
pad(Math.floor(input % 60)),
].join(typeof separator !== 'undefined' ? separator : ':' );
}
:
作为分隔符。time = convertTime(13551.9941351); // --> OUTPUT = 03:45:51
如果您想使用-
作为分隔符,只需将其作为第二个参数传递:
time = convertTime(1126.5135155, '-'); // --> OUTPUT = 00-18-46
var convertTime = function (input, separator) {
var pad = function(input) {return input < 10 ? "0" + input : input;};
return [
pad(Math.floor(input / 3600)),
pad(Math.floor(input % 3600 / 60)),
pad(Math.floor(input % 60)),
].join(typeof separator !== 'undefined' ? separator : ':' );
}
document.body.innerHTML = '<pre>' + JSON.stringify({
5.3515555 : convertTime(5.3515555),
126.2344452 : convertTime(126.2344452, '-'),
1156.1535548 : convertTime(1156.1535548, '.'),
9178.1351559 : convertTime(9178.1351559, ':'),
13555.3515135 : convertTime(13555.3515135, ',')
}, null, '\t') + '</pre>';
另请参阅此Fiddle。
我个人更喜欢没有前导零的领先单位(天,小时,分钟)。但是秒钟应始终由分钟引导(0:13),此表示法很容易被视为“持续时间”,无需进一步说明(标记为min、sec(s)等),可用于各种语言(国际化)。
// returns (-)d.h:mm:ss(.f)
// (-)h:mm:ss(.f)
// (-)m:ss(.f)
function formatSeconds (value, fracDigits) {
var isNegative = false;
if (isNaN(value)) {
return value;
} else if (value < 0) {
isNegative = true;
value = Math.abs(value);
}
var days = Math.floor(value / 86400);
value %= 86400;
var hours = Math.floor(value / 3600);
value %= 3600;
var minutes = Math.floor(value / 60);
var seconds = (value % 60).toFixed(fracDigits || 0);
if (seconds < 10) {
seconds = '0' + seconds;
}
var res = hours ? (hours + ':' + ('0' + minutes).slice(-2) + ':' + seconds) : (minutes + ':' + seconds);
if (days) {
res = days + '.' + res;
}
return (isNegative ? ('-' + res) : res);
}
//模仿服务器端(.net, C#)的时间格式,如下:
public static string Format(this TimeSpan interval)
{
string pattern;
if (interval.Days > 0) pattern = @"d\.h\:mm\:ss";
else if (interval.Hours > 0) pattern = @"h\:mm\:ss";
else pattern = @"m\:ss";
return string.Format("{0}", interval.ToString(pattern));
}