我发现有很多带有日期功能的插件,例如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的属性作为源字符串加入到闭包中来构造正则表达式。

10-05 18:40