如何将分钟和秒添加到 lua 中的日期时间?

How can I add minutes and seconds to a datetime in lua?

我有一个 lua 函数来尝试转换当前播放歌曲的持续时间,例如hh:mm:ss 秒。

function toSeconds (inputstr)
    local mytable = string.gmatch(inputstr, "([^"..":".."]+)");

    local conversion = { 60, 60, 24}
    local seconds = 0;
    --iterate backwards
    local count = 0;

    for i=1, v in mytable do
        count = i+1
    end

    for i=1, v in mytable do
        mytable[count-i]
        seconds = seconds + v*conversion[i]
    end
    return seconds
end

为了将其添加到os.time以获得歌曲的预计结束时间。

但是小时数可能会丢失,或者分钟可能会丢失。

当运行对抗https://www.lua.org/cgi-bin/demo时,我得到的只是input:10: 'do' expected near 'in'

用于测试脚本

function toSeconds (inputstr)
    local mytable = string.gmatch(inputstr, "([^"..":".."]+)");

    local conversion = { 60, 60, 24}
    local seconds = 0;
    --iterate backwards
    local count = 0;

    for i=1, v in mytable do
        count = i+1
    end

    for i=1, v in mytable do
        mytable[count-i]
        seconds = seconds + v*conversion[i]
    end
    return seconds
end

print(toSeconds("1:1:1")

您混淆了编写 for 循环的两种可能方式:

a)

for i=1,10 do
   print(i, "This loop is for counting up (or down) a number")
end

b)

for key, value in ipairs({"hello", "world"}) do
   print(key, value, "This loop is for using an iterator function")
end

如您所见,第一个简单地计算一个数字,在本例中为 i。第二个非常通用,可用于迭代几乎所有内容(例如使用 io.lines),但最常与 pairsipairs 一起使用以迭代 tables.

你也不写for ... in tab,其中tab是一个table;你必须为此使用 ipairs,然后 return 是 table 的迭代器(这是一个函数)


您还错误地使用了 string.gmatch;它不是 return 一个 table,而是一个迭代器函数,用于匹配字符串中的模式,因此您可以像这样使用它:

local matches = {}
for word in some_string:gmatch("[^ ]") do
   table.insert(matches, word)
end

这会为您提供包含匹配项的实际 table,但如果您只想迭代 table,您还不如直接使用 gmatch 循环。


for i=1, v in mytable do
   count = i+1
end

我想你只是想在这里计算 table 中的元素?您可以使用 # 运算符轻松获得 table 的长度,因此 #mytable


如果你有一个像 hh:mm:ss 这样的字符串,但是小时和分钟可能会丢失,最简单的方法可能是只用 0 填充它们。实现这个的一个有点 hacky 但简短的方法是只需将 "00:00:" 附加到您的字符串,然后查找其中的最后 3 个数字:

local hours, minutes, seconds = ("00:00:"..inputstr):match("(%d%d):(%d%d):(%d%d)$")

如果没有遗漏任何内容,您最终会得到类似 00:00:hh:mm:ss 的结果,您只需取其最后 3 个值即可得到正确的时间。