2011-02-25 63 views
0

我正在尋找可將「1天」轉換爲86400000或「20分鐘」爲1200000的庫或函數。我是從一個可讀的字符串將一些MS是否有一個庫將「1天」轉換爲86400000

喜歡的東西的:

var key = { s: 1000, m:1000*60, h:1000*60*60, d: 1000*60*60*24, ... }, 
    m = str.match((\d+) (\w)), 
    result = m[1] * (key[m[2]] || 1); 
+1

你可能想尋找到使用內置的Date對象的這種東西,因爲它可以有很多的東西應付如閏年和夏令時表示這種方法無法處理。 – GordonM 2011-02-25 14:40:03

回答

8

您的代碼應該工作得很好。我接受了基本的想法,並將更靈活的功能組合在一起,可以將單位組合起來。這是極其輕鬆接受它,但你可以使它更嚴格,如果你想。

(function() { 
    var units = { 
     ms: 1/1000, 

     m: 60, 
     min: 60, mins: 60, 
     minute: 60, minutes: 60, 

     h: 60*60, 
     hr: 60*60, hrs: 60*60, 
     hour: 60*60, hours: 60*60, 

     d: 60*60*24, 
     day: 60*60*24, days: 60*60*24, 
    }; 

    Date.parseInterval = function(interval) { 
     var seconds = 0; 
     interval.replace(/(\d+(?:\.\d*)?)\s*([a-z]+)?/ig, function($0, number, unit) { 
      if (unit) { 
       number *= units[unit.toLowerCase()] || 1; 
      } 
      seconds += +number; 
     }); 
     return seconds * 1000; 
    }; 
})(); 

console.log(Date.parseInterval('1 day') === 86400000); 
console.log(Date.parseInterval('20 min') === 1200000); 
console.log(Date.parseInterval('1 day, 3 hours, and 22.5 seconds') === 97222500); 
+0

我去了一個類似的路徑查看我的代碼** [DEMO](http://jsfiddle.net/5zJkt/)** – qwertymk 2011-02-27 08:31:02

0

我使用datejs庫日期在過去的成功。

這似乎支持解析字符串像now + 20 min,所以在最壞的情況,你可以減去now或任何固定日期似乎並不支持這一點),然後調用該getMilliseconds()

+0

25k對我的有點太臃腫 – qwertymk 2011-02-25 14:56:09

+0

壓縮時只有7KB,但是好的,如果你想要一個函數去做一件沒有什麼特別的事情,那麼你完全排除了「庫」。 – Ken 2011-02-25 15:03:27

1
strToMs = function(str) { 
    var multiplier = { 
     ms: 1, mil: 1, s:1000, sec: 1000, min: 1000*60, 
     hr: 1000*60*60, hrs: 1000*60*60, hou: 1000*60*60, 
     d: 1000*60*60*24, day: 1000*60*60*24, mon: 1000*60*60*24*30, 
     y: 1000*60*60*24*386.25, yea: 1000*60*60*24*386.25 
    }, 
    num = str.match(/\d+/), units = str.match(/[a-z]{1,3}/i) 
    return num * (multiplier[units] || 1); 
} 

DEMO

+0

這是另一種有趣的方式。它以不同的方式靈活運用。 – 2011-02-27 14:54:44

相關問題