我正在尝试将持续时间从 mm:ss.mss 格式转换为完整的毫秒数,然后返回。
我已经有一个工作功能,可以将毫秒转换为持续时间,但是我似乎无法做到这一点。
比如说我的持续时间为 32:29.060 ,我想将其转换为毫秒。为此,我使用此功能:
RequestModel.Id
但是每当我尝试转换回持续时间时,都会失败。我试过分别解析分钟,秒和毫秒,但似乎不起作用。
这是我使用的代码:
function millisecondsToTime(ms, digits) {
digits = digits || 12;
return new Date(ms).toISOString().slice(23-digits, -1);
}
var a = millisecondsToTime(5549060, 9);
我有一个输入栏,其格式为 mm:ss.mss ,我需要将其转换为毫秒。我该怎么办?
答案 0 :(得分:0)
您可以返回一个
new Date(ms)
从ms获取日期。 为了获得与ms相同的日期,
date.getTime() // returns ms from date object
完整示例:
const ms = 5549060
const date = new Date(ms) // get a date from ms
console.log(date.getTime) // logs 5569060
如果您输入的是格式为mm:ss.mss的字符串,并且想要从中获取日期,则可以使用一下矩。
const moment = require('moment')
const date = moment('22:15.143', 'mm:ss.SSS') // get date from pre specified format
答案 1 :(得分:0)
您可以使用字符串方法 indexOf()和 substr()从字符串中获取单个数字并相应地计算时间。
尽管您的 millisecondsToTime()函数无法正常运行,但我担心。 5549060毫秒大约是92分钟,返回的时间是32:29.060
function backToTime(time) {
var index = time.indexOf(":");
var minutes = time.substr(0, index);
var seconds = time.substr(index + 1, time.indexOf(".") - (index + 1));
var milliseconds = time.substr(time.indexOf(".") + 1, time.length);
return parseInt(minutes * 60 * 1000) + parseInt(seconds * 1000) + parseInt(milliseconds);
}
console.log(backToTime("32:29.060"));
答案 2 :(得分:0)
您无法转换为毫秒,这是两种转换的基本数学方法:
let input = 5549060
//toDuration
let seconds = Math.floor(input / 1000);
let ms = input - seconds*1000;
let m = Math.floor(seconds / 60);
let s = seconds - m*60;
duration = m + ":" + s + "." + ms
console.log(duration)
//toMilliseconds
let holder = duration.split(":");
m = parseInt(holder[0]);
holder = holder[1].split(".");
s = parseInt(holder[0]);
ms = parseInt(holder[1]);
milliseconds = (m*60 + s)*1000 + ms
console.log(milliseconds)
如果需要,请检查ms的长度以加0,如果需要,则将其长度为3
答案 3 :(得分:0)
我认为您的毫秒到持续时间转换器将超过60分钟的持续时间。这是因为使用Date
的分钟字段将在经过59秒后重新包裹到分钟中。如果您想在第一个字段中获得超过59的值的良好支持,我认为也许转向基于正则表达式的解析器,并使用乘法和加法,除法和取模来手动提取和减少字段可能会很好。可能是这样的:
var duration = ms => `${(ms / 60000) | 0}`.padStart(2, '0') + `:` + `${ms % 60000 / 1000 | 0}`.padStart(2, '0') + `.` + `${ms % 1000}`.padStart(3, '0')
var millisec = durat => (match => match && Number(match[1]) * 60000 + Number(match[2]) * 1000 + Number(match[3]))(/^([0-9]+)\:([0-5][0-9])\.([0-9]{3})$/.exec(durat))
您可以看到给定输入5549060
,此函数提供的输出92:29.60
比您自己的输出大60秒,我相信是正确的。也许这是针对您的用例,但我无法想象总体上如此理想……