从时间值生成持续时间

Generating Duration from Time Values

我正在尝试通过 moment.js 找到一种方法来转换两个时间值,这两个时间值作为开始时间和停止时间出现,以小时和分钟表示为字符串值,如下所示:开始:1:12,然后停止:2:10,或者在下午,开始:14:23,然后停止:15:22,并由此生成以毫秒为单位的持续时间。我尝试了以下方法,但它给了我一个 NaN 结果:

澄清一下,我正在接收字符串格式的数据。请参阅下面的内容:

const startValue = "1:12";
const stopValue = "2:10"; // for a duration of 58 minutes

const msDuration = moment(stopValue).format('HH:mm').valueOf() - moment(startValue).format('HH:mm').valueOf();

我假设这里的问题是我的 startValuestopValue 需要先转换为不同的格式,因为它们当前是字符串值?那么,如何将字符串值“1:12”转换为 moment 可以使用的值?

使用香草 JS:

function getMilliSecs(text) {
  const spl = text.split(":");
  return parseInt(spl[0])*60*60*1000 + parseInt(spl[1])*60*1000; 
}

function getMilliSecsDuration(start, stop) {
  return getMilliSecs(stop) - getMilliSecs(start);
}

根据您上面的评论,我知道您收到的时间回复格式如下:“HH:mm”。

如果实际的日期并不重要,那么你可以这样转换它(JsFiddle):

const startValue = "1:12";
const stopValue = "2:10"; // for a duration of 58 minutes
const start = { hour: startValue.split(":")[0], minute: startValue.split(":")[0] }
const stop = { hour: stopValue .split(":")[0], minute: stopValue .split(":")[0] }

const msDuration = moment().hours(stop.hour).minutes(stop.minute).valueOf() - moment().hours(start.hour).minutes(start.minute).valueOf(); //you might get 1 ms less. so jest set also ms to 0
const msDurationA = moment().hours(stop.hour).minutes(stop.minute).milliseconds(0).valueOf() - moment().hours(start.hour).minutes(start.minute).milliseconds(0).valueOf();

所以基本上你是在获取当前日期并改变小时和分钟,这样你就可以使用 moment.Js。

虽然我的问题是,你为什么需要时间?你也可以在原生 JS 中完成:

const startValue = "1:12";
const stopValue = "2:10"; // for a duration of 58 minutes

const start = { hour: +startValue.split(":")[0], minute: +startValue.split(":")[1] };
const stop = { hour: +stopValue.split(":")[0], minute: +stopValue.split(":")[1] };

const msDuration = (stop.hour * 3600000 + stop.minute * 60000) - (start.hour * 3600000 + start.minute * 60000);

console.log("msDuartion: ", msDuration);

您的代码有两个问题:

  1. 解析无效

    您输入的时间不是 Moment 可以识别的标准格式,因此您必须使用格式化解析来向它解释您的时间。

  2. format调用前作为字符串 valueOf.

    .format()将你的Moment对象转为字符串,字符串不能相减。要解决这个问题,您可以删除 .format() 调用。相反,您也可以使用 .diff(),它会为您计算差值。

因此,您可以使用以下任一方法:

const msDuration = moment(stopValue, "H:mm").valueOf() - moment(startValue, "H:mm").valueOf()
const msDuration = moment(stopValue, "H:mm") - moment(startValue, "H:mm") // Subtracting will implicitly call .valueOf()
const msDuration = moment(stopValue, "H:mm").diff(moment(startValue, "H:mm"))