Javascript 解析Luxon中类似iso8601的持续时间
我的持续时间字符串如下所示:Javascript 解析Luxon中类似iso8601的持续时间,javascript,typescript,duration,luxon,Javascript,Typescript,Duration,Luxon,我的持续时间字符串如下所示: 1:16.352 其中,1是分钟部分,16是秒部分,352是毫秒部分 我想使用持续时间。fromISOTime但我得到: { "reason": "unparsable", "explanation": "the input \"1:16.352\" can't be parsed as ISO 8601" } 在Luxon中是否有解析此类持续时间的干净方
1:16.352
其中,1
是分钟部分,16
是秒部分,352
是毫秒部分
我想使用持续时间。fromISOTime
但我得到:
{
"reason": "unparsable",
"explanation": "the input \"1:16.352\" can't be parsed as ISO 8601"
}
在Luxon中是否有解析此类持续时间的干净方法?不起作用,因为1:16.352
不是ISO 8601时间字符串,小时部分缺失(见I)
构建LuxonDuration
对象的解决方法如下:
const DateTime=luxon.DateTime;
常数持续时间=卢克逊持续时间;
const startOfHour=DateTime.local().startOf('hour').toMillis();
const dt=DateTime.fromFormat(“1:16.352”,“m:ss.SSS”)。托米利斯();
const dur=持续时间。从毫秒(dt-开始到小时);
log(dur.toFormat(“m'分钟's'秒's'毫秒”)代码>
不起作用,因为1:16.352
不是一个ISO 8601时间字符串,小时部分缺失(请参见I)
构建LuxonDuration
对象的解决方法如下:
const DateTime=luxon.DateTime;
常数持续时间=卢克逊持续时间;
const startOfHour=DateTime.local().startOf('hour').toMillis();
const dt=DateTime.fromFormat(“1:16.352”,“m:ss.SSS”)。托米利斯();
const dur=持续时间。从毫秒(dt-开始到小时);
log(dur.toFormat(“m'分钟's'秒's'毫秒”)代码>
类似于@VincenzoC,我调整了我的输入字符串
:
const Duration=luxon.Duration;
var输出;
const durationInput=“1:16.352”
if(durationInput.match(/:/g)| |[]长度==1){
常量分号location=durationInput.indexOf(“:”);
if(分号位置===1){
输出=“00:0”+持续时间输入;
}
if(分号位置===2){
输出=“00:”+持续时间输入;
}
}
console.log(Duration.fromISOTime(输出))代码>
类似于@VincenzoC,我调整了我的输入字符串
:
const Duration=luxon.Duration;
var输出;
const durationInput=“1:16.352”
if(durationInput.match(/:/g)| |[]长度==1){
常量分号location=durationInput.indexOf(“:”);
if(分号位置===1){
输出=“00:0”+持续时间输入;
}
if(分号位置===2){
输出=“00:”+持续时间输入;
}
}
console.log(Duration.fromISOTime(输出))代码>
正如我在评论中提到的,您可以使用静态方法,并简单地将输入拆分为分钟
、秒
和毫秒
配置选项。在您的例子中,一个普通的正则表达式(\d+):(\d+)\(\d+)
应该可以完成这个任务,不需要临时日期或规范化
const{Duration}=luxon;
const durationInput=“1:16.352”;
const fromCustom=(输入)=>{
常量[,分钟,秒,毫秒]=输入。匹配(/(\d+):(\d+)\(\d+);
返回Duration.fromObject({
分、秒、毫秒
});
};
日志(来自自定义(durationInput))代码>
正如我在评论中提到的,您可以使用静态方法,并简单地将输入拆分为分钟
、秒
和毫秒
配置选项。在您的例子中,一个普通的正则表达式(\d+):(\d+)\(\d+)
应该可以完成这个任务,不需要临时日期或规范化
const{Duration}=luxon;
const durationInput=“1:16.352”;
const fromCustom=(输入)=>{
常量[,分钟,秒,毫秒]=输入。匹配(/(\d+):(\d+)\(\d+);
返回Duration.fromObject({
分、秒、毫秒
});
};
日志(来自自定义(durationInput))代码>
@OlegValter afaikDuration
没有这样的方法抱歉,我误读了这个问题-fromObject
方法怎么样?似乎您可以在点上拆分并使用值-或者您想找到一个直接接受自定义格式的方法吗?1:16.354
既不是有效的ISO-8601时间(00:01:16.354
),也不是有效的持续时间(PT1M16.352S
)并且不能像解析一样进行解析。@olegvater afaikDuration
没有这样的方法抱歉,我误读了这个问题-fromObject
方法怎么样?似乎您可以在点上拆分并使用值-或者您想找到一个直接接受自定义格式的方法吗?1:16.354
既不是有效的ISO-8601时间(00:01:16.354
),也不是有效的持续时间(PT1M16.352S
)并且不能像解析一样对其进行解析。只有一种情况下regexp无法工作-1:16
没有毫秒part@pixel-是的,很明显,我认为你的输入结构是稳定的?如果没有,则默认值为毫秒的(\d+):(\d+)(:\。(\d+)
应该足够了。只有一种情况下,如果没有毫秒,regexp将无法工作-1:16
part@pixel-是的,很明显,我认为你的输入结构是稳定的?如果不是,则默认为毫秒的(\d+):(\d+)(:\。(\d+))
应该足够了