Javascript:转换字符串,即。 “1小时2分钟”到秒的时间
我已经在日期找到了很多这类function的插件,比如这个,虽然我找不到能够转换时间间隔字符串的东西(“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查找对象与正则表达式保持同步,但它不应该太难; 例如,您可以通过将tMillis的属性作为源字符串连接来构造闭包中的正则表达式。
一旦确定了格式,就需要编写一个脚本,将时间格式转换为标准格式,或者只是从格式中提取基本数字。
之后,您可以使用日期构造函数来解析日期,然后从getTime()方法中获取秒数
var d=new Date("October 12, 1987 10:23:00"); document.write(d.getTime() + " milliseconds since 1970/01/01");
我在java(而不是javascript)中编写了一个开源库MgntUtils,部分回答了这个要求。 它包含一个静态方法parsingStringToTimeInterval(String value)
此方法解析一个预期保存一些时间间隔值的字符串 – 一个带有可选时间单位后缀的数值。 例如,字符串“38s”将被解析为38秒,“24m” – 24分钟“4h” – 4小时,“3d” – 3天和“45”将被解析为45毫秒。 支持的后缀为“秒”为秒,“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();
将解决您的转换问题。 显然,这不是一个过于复杂的function,但它可以在配置文件中增加简单性和清晰度,并将一些挫败感和“愚蠢”错误计算保存到几毫秒的错误中。 以下是描述MgntUtils库的文章的链接以及从何处获取它: MgntUtils