Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 解析Luxon中类似iso8601的持续时间_Javascript_Typescript_Duration_Luxon - Fatal编程技术网

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)

构建Luxon
Duration
对象的解决方法如下:

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)

构建Luxon
Duration
对象的解决方法如下:

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 afaik
Duration
没有这样的方法抱歉,我误读了这个问题-fromObject
方法怎么样?似乎您可以在点上拆分并使用值-或者您想找到一个直接接受自定义格式的方法吗?
1:16.354
既不是有效的ISO-8601时间(
00:01:16.354
),也不是有效的持续时间(
PT1M16.352S
)并且不能像解析一样进行解析。@olegvater afaik
Duration
没有这样的方法抱歉,我误读了这个问题-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+))
应该足够了