Преобразование строки времени, такой как «1d», в секунды - PullRequest
0 голосов
/ 28 декабря 2018

В настоящее время я ищу способ принять пользовательский ввод и преобразовать его в секунды.Если человек / пользователь вводит любой из следующих входных данных ниже (с любым целым числом), он возвращает второй эквивалент этого

Примеры входных данных будут: 1y, 1-й, 1d, 1h, 1m, 1s

До сих пор я пробовал несколько вещей, проверяя последнюю букву во входных данных и т. Д. Ни одна из них не пришла именно к тому, что я ищу, к сожалению.

1 Ответ

0 голосов
/ 28 декабря 2018

Ваши входы структурированы как (одна или несколько цифр ASCII), за которыми следуют (одна или несколько букв ASCII).Вы можете описать это с помощью шаблона ^(%d+)(%a+)$:

function parseDuration(input)
    local count, unit = input:match "^(%d+)(%a+)$"
    if not count then
        return nil, "invalid duration `" .. input .. "`"
    end

Теперь вам нужно просто выполнить преобразование единиц измерения.Таблица секунд в каждой единице - один очень ясный способ сделать это:

    local SECONDS_PER = {
        s = 1,
        m = 60,
        h = 60 * 60,
        d = 24 * 60 * 60,
        w = 7 * 24 * 60 * 60,
        -- etc
    }

    if not SECONDS_PER[unit] then
        return nil, "unknown unit `" .. unit .. "`"
    end

    return tonumber(count) * SECONDS_PER[unit]
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...