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

我目前正在寻找一种方法,将用户输入转换为秒。 如果一个人/用户输入以下任何一个示例(带任何整数),则它将返回相应的秒数

输入示例可能是:1y、1mth、1d、1h、1m、1s

到目前为止,我已经尝试了多种方法,检查输入中的最后一个字母等等。 不幸的是,没有一个正好符合我要找的内容。

点赞
用户2616735
用户2616735

你的输入格式为一个或多个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
2018-12-28 16:52:37