将时间字符串(例如“ 1d”)转换为秒

时间:2018-12-28 16:35:23

标签: lua

我目前正在寻找一种方法来接受用户输入并将其转换为秒。如果某人/用户在下面键入以下任意输入(带有任何整数),则它将返回该输入的第二个等价物

输入示例为:1y,1mth,1d,1h,1m,1s

到目前为止,我已经尝试了多种方法,例如检查输入中的最后一个字母,等等。没有一种方法能够准确地满足我的要求。

1 个答案:

答案 0 :(得分:4)

您的输入的结构为(一个或多个ASCII数字),后跟(一个或多个ASCII字母)。您可以使用pattern ^(%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