从时间值生成持续时间
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();
我假设这里的问题是我的 startValue
和 stopValue
需要先转换为不同的格式,因为它们当前是字符串值?那么,如何将字符串值“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);
您的代码有两个问题:
解析无效
您输入的时间不是 Moment 可以识别的标准格式,因此您必须使用格式化解析来向它解释您的时间。
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"))
我正在尝试通过 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();
我假设这里的问题是我的 startValue
和 stopValue
需要先转换为不同的格式,因为它们当前是字符串值?那么,如何将字符串值“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);
您的代码有两个问题:
解析无效
您输入的时间不是 Moment 可以识别的标准格式,因此您必须使用格式化解析来向它解释您的时间。
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"))