在JavaScript中将类似倒计时的日期格式转换为毫秒
我必须将此倒计时转换为毫秒,如在JavaScript中将类似倒计时的日期格式转换为毫秒,javascript,date,date-format,Javascript,Date,Date Format,我必须将此倒计时转换为毫秒,如Dateformat0d0h0m0s。格式可以选择具有0d、0h、0m标题值,因此允许的值为 1d23h10m 0d12h0m 12h0m 0m0s 0m10s 10s 虽然至少需要一个尾随0s格式值,但0值对于每个dhm格式都是可选的,因此0m5s和5s都是允许的值 因为此功能每秒将应用N次。(N介于10和100之间),每个函数执行时间都有一个性能约束 注意。可以使用一个简单的Regex模式将类似/[dhms]/gi的字符串拆分为天、小时、分钟和秒的日期组件,但
Date
format0d0h0m0s
。格式可以选择具有0d
、0h
、0m
标题值,因此允许的值为
1d23h10m
0d12h0m
12h0m
0m0s
0m10s
10s
虽然至少需要一个尾随0s
格式值,但0
值对于每个dhm
格式都是可选的,因此0m5s
和5s
都是允许的值
因为此功能每秒将应用N次。(N介于10和100之间),每个函数执行时间都有一个性能约束
注意。可以使用一个简单的
Regex
模式将类似/[dhms]/gi
的字符串拆分为天
、小时
、分钟
和秒
的日期组件,但我正在寻找一种日期格式安全的方法。一个选项是用正则表达式提取所有匹配项,然后根据需要进行乘法和求和:
const re=/(?:(\d+)y)?(?:(\d+)m)?(?:(\d+)d)?(?:(\d+)h)?(?:(\d+)m)?(?:(\d+)s)?/;
const toSeconds=输入=>{
常量[,年,月,日,小时,分钟,秒]=输入匹配(re);
//log({年、月、日、时、分、秒})
常数总天数=((年| | 0)*365)
+((月数| | 0)*30)
+(天| | 0);
const totalSeconds=totalDays*24*3600
+((小时| | 0)*3600)
+((分钟| | 0)*60)
+(秒| | 0)
返回总秒数*1000;
};
`1d23h10m
0d12h0m
12h0m
百万
0m10s
10s`.split('\n').forEach(str=>console.log(toSeconds(str))代码>一个选项是使用正则表达式提取所有匹配项,然后根据需要进行乘法和求和:
const re=/(?:(\d+)y)?(?:(\d+)m)?(?:(\d+)d)?(?:(\d+)h)?(?:(\d+)m)?(?:(\d+)s)?/;
const toSeconds=输入=>{
常量[,年,月,日,小时,分钟,秒]=输入匹配(re);
//log({年、月、日、时、分、秒})
常数总天数=((年| | 0)*365)
+((月数| | 0)*30)
+(天| | 0);
const totalSeconds=totalDays*24*3600
+((小时| | 0)*3600)
+((分钟| | 0)*60)
+(秒| | 0)
返回总秒数*1000;
};
`1d23h10m
0d12h0m
12h0m
百万
0m10s
10s`.split('\n').forEach(str=>console.log(toSeconds(str))代码>如果字符串很短,简单的字符解析器是使用正则表达式的一种实用替代方法。以下内容与ECMAScript 2011兼容:
函数解析时间(秒){
var标记={d:8.64e7,h:3.6e6,m:6e4,s:1e3};
var buff='';
返回s.split('').reduce(函数(ms,c){
令牌中的c?(ms+=buff*令牌[c])&(buff=''):buff+=c;
返回ms;
}, 0);
}
//例子
[1d23h10m','0d12h0m','12h0m','0m0s','0m10s','10s','1d1s']{
console.log(s+'=>'+parseTime);
});代码>如果字符串很短,简单的字符解析器是使用正则表达式的一种实用替代方法。以下内容与ECMAScript 2011兼容:
函数解析时间(秒){
var标记={d:8.64e7,h:3.6e6,m:6e4,s:1e3};
var buff='';
返回s.split('').reduce(函数(ms,c){
令牌中的c?(ms+=buff*令牌[c])&(buff=''):buff+=c;
返回ms;
}, 0);
}
//例子
[1d23h10m','0d12h0m','12h0m','0m0s','0m10s','10s','1d1s']{
console.log(s+'=>'+parseTime);
});代码>谢谢,评估两个解决方案之间的性能会很有趣,因为我将从套接字服务器解析此输出,每秒n次,在问题处添加一些约束。谢谢,评估两个解决方案之间的性能会很有趣,因为我将从套接字服务器解析此输出,每秒n次,在问题处添加一些约束。