Lua 转换时间字符串,如“0”;1d“;到秒

Lua 转换时间字符串,如“0”;1d“;到秒,lua,Lua,我目前正在寻找一种方法来获取用户输入并将其转换为秒。如果一个人/用户在下面键入以下任何输入(使用任何整数),那么它将返回该输入的第二个等价项 输入示例为:1y、1mth、1d、1h、1m、1s 到目前为止,我已经尝试了多种方法,检查输入中的最后一个字母,等等。。遗憾的是,没有一个能完全符合我的要求。您的输入结构为(一个或多个ASCII数字)后跟(一个或多个ASCII字母)。您可以用^(%d+)(%a+)$来描述这一点: 现在你只需要做单位转换。每个单位的秒数表是一种非常明确的方法: lo

我目前正在寻找一种方法来获取用户输入并将其转换为秒。如果一个人/用户在下面键入以下任何输入(使用任何整数),那么它将返回该输入的第二个等价项

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


到目前为止,我已经尝试了多种方法,检查输入中的最后一个字母,等等。。遗憾的是,没有一个能完全符合我的要求。

您的输入结构为(一个或多个ASCII数字)后跟(一个或多个ASCII字母)。您可以用
^(%d+)(%a+)$
来描述这一点:

现在你只需要做单位转换。每个单位的秒数表是一种非常明确的方法:

    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

我将首先编写一个函数,该函数接受字符串输入,找出它是哪一个,并返回适当的秒数。
    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