2011-02-25 5 views
0

'1 일'을 86400000 또는 '20 분 '에서 1200000으로 변환 할 수있는 라이브러리 또는 함수를 찾고 있습니다. 나는은 '1 일'을 86400000으로 변환하는 라이브러리가 있습니다.

뭔가 같은 MS의 숫자로 읽을 수있는 문자열에서거야 : 나는 날짜에 대한 datejs 라이브러리를 사용하여 과거에 성공을 거두었습니다

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

답변

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

0

.

now + 20 min 같은 구문 분석 문자열을 지원하는 것, 그래서 최악의 경우 now (을 또는 고정 된 날짜은이 기능을 지원하지 않는 것) 뺄 수 있고, 그 다음에 getMilliseconds()를 호출합니다.

+0

25k가 너무 복잡해졌습니다. – qwertymk

+0

압축시에만 7KB이지만 괜찮 으면 하나의 특정 작업을 수행하려면 '라이브러리'를 완전히 제외해야합니다. – Ken

0

내장 된 Date 객체는 많은 것을 처리 할 수 ​​있습니다. 그렇지 않으면 http://www.datejs.com/과 같은 것이 유용 할 수 있습니다.

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

다른 흥미로운 방법입니다. 그것은 다른 방식으로 유연합니다. –

관련 문제