есть ли библиотека, которая конвертирует «1 день» в 86400000 - PullRequest
0 голосов
/ 25 февраля 2011

Я ищу библиотеку или функцию, которая может конвертировать «1 день» в 86400000 или «20 минут» в 1200000.Я иду от читаемой строки к числу мс

Что-то вроде:

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); 

Ответы [ 4 ]

8 голосов
/ 26 февраля 2011

Код у вас должен работать очень хорошо. Я взял основную идею и собрал более гибкую функцию, которая может объединять единицы. Это чрезвычайно спокойно относится к тому, что он принимает, но вы можете сделать это более строгим, если хотите.

(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);
1 голос
/ 27 февраля 2011
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 голосов
/ 25 февраля 2011

Встроенный объект Date может обрабатывать множество вещей. Иначе может пригодиться что-то вроде http://www.datejs.com/

0 голосов
/ 25 февраля 2011

В прошлом я имел успех, используя библиотеку datejs для дат.

Кажется, он поддерживает синтаксический анализ строк, таких как now + 20 min, поэтому в худшем случае вы можете вычесть now ( или любую фиксированную дату , похоже, не поддерживает это), а затем вызвать getMilliseconds() на что.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...