Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.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中将类似倒计时的日期格式转换为毫秒_Javascript_Date_Date Format - Fatal编程技术网

在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
format
0d0h0m0s
。格式可以选择具有
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次,在问题处添加一些约束。