我发现有很多带有日期功能的插件,例如this,尽管我找不到能够转换时间间隔字符串(“ 2分钟”,“ 10秒”,“ 1小时4分钟”等到以秒为单位的时间。
您知道任何想法或插件吗?谢谢。
最佳答案
我会写一个重复匹配“ (digit+) (timeUnit)
”并以毫秒为单位进行算术的函数,因为它们是更常见的单位。像这样:
var timespanMillis = (function() {
var tMillis = {
second: 1000,
min: 60 * 1000,
minute: 60 * 1000,
hour: 60 * 60 * 1000 // etc.
};
return function(s) {
var regex = /(\d+)\s*(second|min|minute|hour)/g, ms=0, m, x;
while (m = regex(s)) {
x = Number(m[1]) * (tMillis[m[2]]||0);
ms += x;
}
return x ? ms : NaN;
};
})();
timespanMillis("2 mins"); // => 120000
timespanMillis("10 seconds"); // => 10000
timespanMillis("1 hour and 4 minutes"); // => 3840000
timespanMillis("Foobar"); // => NaN
诀窍是使tMillis查找对象与regex保持同步,但它并不难。例如,您可以通过将tMillis的属性作为源字符串加入到闭包中来构造正则表达式。