从毫秒转换为持续时间

时间:2019-04-05 11:01:01

标签: javascript datetime time

我正在尝试将持续时间从 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 ,我需要将其转换为毫秒。我该怎么办?

4 个答案:

答案 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秒,我相信是正确的。也许这是针对您的用例,但我无法想象总体上如此理想……

相关问题