Javascript:转换字符串,即。 “1小时2分钟”到秒的时间

时间:2011-04-24 17:51:48

标签: javascript jquery date time

我在日期找到了很多这类功能的插件,比如this,虽然我找不到能够转换时间间隔字符串的东西(“2分钟”,“ 10秒钟,“1小时4分钟”等等,以秒为单位。

您了解的任何想法或插件?感谢。

3 个答案:

答案 0 :(得分:2)

我会编写一个重复匹配“(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查找对象与正则表达式保持同步,但它不应该太难;例如,您可以通过将tMillis的属性作为源字符串连接来构造闭包中的正则表达式。

答案 1 :(得分:0)

一旦确定了格式,就需要编写一个脚本,将时间格式转换为标准格式,或者只从您的格式中提取基本数字。

之后,您可以使用日期构造函数来解析日期,然后从getTime()方法中获取秒数

var d=new Date("October 12, 1987 10:23:00");
document.write(d.getTime() + " milliseconds since 1970/01/01");

答案 2 :(得分:0)

我在java(而不是javascript)中编写了一个开源库MgntUtils,部分回答了这个要求。它包含一个静态方法parsingStringToTimeInterval(String value)此方法解析一个预期保存一些时间间隔值的字符串 - 一个带有可选时间单位后缀的数值。例如,字符串“38s”将被解析为38秒,“24m” - 24分钟“4h” - 4小时,“3d” - 3天和“45”将被解析为45毫秒。支持的后缀为秒数“s”,分钟为“m”,小时为“h”,日期为“d”。不带后缀的字符串被认为是以毫秒为单位保存的值。后缀不区分大小写。如果提供String包含不受支持的后缀或保留负数值或零或保存非数字值 - 则抛出IllegalArgumentException。此方法返回TimeInterval类 - 也是在此库中定义的类。本质上,它包含两个具有相关getter和setter的属性:long“value”和java.util.concurrent.TimeUnit。但除了getter和setter之外,这个类还有方法toMillis(),toSeconds(),toMinutes(),toHours()toDays()。这些方法在指定的时间范围内返回长值(与java.util.concurrent.TimeUnit类中的对应方法相同)

此方法对于解析时间间隔属性(如超时或配置文件中的等待时间)非常有用。它消除了从不同时间尺度到来回毫秒的不必要计算。请考虑您有一个需要设置5天的methodInvokingInterval属性。因此,为了设置毫秒值,您需要计算5天是432000000毫秒(显然不是一个不可能的任务,但烦人且容易出错)然后看到值432000000的任何其他人将不得不计算回到5天令人沮丧。但是使用此方法,您将具有设置为“5d”的属性值并调用代码

long seconds = TextUtils.parsingStringToTimeInterval("5d").toSeconds();

将解决您的转化问题。显然,这不是一个过于复杂的功能,但它可以在配置文件中增加简单性和清晰度,并将一些挫败感和“愚蠢”错误计算保存到几毫秒的错误中。以下是描述MgntUtils库的文章的链接以及获取它的位置:MgntUtils