时间运算
添加并比较时间。
时间运算 是 CoddyKit 上的免费 Lua Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Lua Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Lua Academy 课程共包含 4 节课。
时间只是数字
由于 os.time 返回普通的秒数,日期计算基本上就是普通的算术运算。加上秒数可以向前移动,减去秒数可以回溯。
本课将介绍如何移动和比较时间,以及如何找出两个时刻之间的间隔。
分钟、小时和天中的秒数
要使用更大的时间单位,请记住基本数量:一分钟有 60 秒,一小时有 3600 秒,一天有 86400 秒。
乘以这些常量,就可以用秒数表示任意时长。
print("Minute:", 60)
print("Hour:", 60 * 60)
print("Day:", 24 * 60 * 60)一小时后
要获取一小时后的时间,请获取 os.time(),然后加上 3600 秒。
将新的数字传给 os.date,即可将结果显示为易读的文本。
local now = os.time()
local later = now + 3600
print(os.date("%H:%M", now))
print(os.date("%H:%M", later))昨天和明天
加上 86400 秒可以跳到一天之后,减去它则可以回到一天之前。
这是一种快速计算明天或昨天日期的方法,无需担心月份边界。
local now = os.time()
print("Yesterday:", os.date("%Y-%m-%d", now - 86400))
print("Tomorrow: ", os.date("%Y-%m-%d", now + 86400))构建特定日期
先使用一个表构建固定日期,再从该日期开始计算。这里我们创建 2025 年元旦,然后加上一周。
增加的时间会正确地推进到 1 月 8 日。
local start = os.time({year=2025, month=1, day=1})
local week = start + 7 * 86400
print(os.date("%Y-%m-%d", week))比较两个时间
由于时间是数字,普通的比较运算符也能正常使用。数字越大,表示时刻越晚。
这样就能轻松检查截止时间是否已经过去。
local deadline = os.time({year=2020, month=1, day=1})
local now = os.time()
if now > deadline then
print("Deadline has passed")
end秒数差
用一个时间减去另一个时间,会得到以秒为单位的间隔。Lua 还提供了 os.difftime(a, b),它会将 a - b 作为数字返回。
使用 os.difftime 是查找时间跨度的跨平台推荐方式。
local a = os.time({year=2025, month=1, day=2})
local b = os.time({year=2025, month=1, day=1})
print(os.difftime(a, b))将秒转换为天
原始的秒数差值很大,因此请通过除法转换为更易使用的单位。除以 86400 可得到天数,除以 3600 可得到小时数。
只想要完整单位时,请使用 math.floor 去掉小数部分。
local diff = os.difftime(
os.time({year=2025, month=1, day=11}),
os.time({year=2025, month=1, day=1}))
print(diff / 86400, "days")距离事件还有多少天
把这些思路结合起来,计算距离未来 date 还有多少天。用目标时间减去当前时间,然后将秒数转换为完整天数。
这种模式是倒计时器和提醒应用的基础。
local target = os.time({year=2030, month=1, day=1})
local secs = os.difftime(target, os.time())
local days = math.floor(secs / 86400)
print("Days left:", days)使用 os.time 进行规范化
有个实用技巧:向 os.time 传入一个包含超出范围字段的表,它会自动修正。一月的第 32 天会变成 2 月 1 日。
这样只需增加 day 字段的值就能增加天数,Lua 会处理好日历。
local t = os.time({year=2025, month=1, day=32})
print(os.date("%Y-%m-%d", t))安全地增加月份
由于规范化机制,您可以将 month 字段增加到 12 以上,Lua 会将年份顺延。
2025 年的第 13 个月会自动变成 2026 年 1 月。
local t = os.time({year=2025, month=13, day=1})
print(os.date("%Y-%m-%d", t))快速检查
运用您对时间运算的知识。
回顾
time 值是数字,因此可以 add 或减去秒数来调整它们:每小时 3600 秒,每天 86400 秒。可以直接使用 > 和 < 比较时间。
请使用 os.difftime 计算两个时间之间的差值,然后通过除法得到小时数或天数。还请记住,os.time 会规范化表中超出范围的字段,从而简化日历运算。
常见问题解答
「时间运算」课时是免费的吗?
是的 — 「时间运算」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Lua Academy 课程的其余内容,请升级到 CoddyKit PRO。 Lua Academy 课程共包含 4 节课。
「时间运算」这节课中我会学到什么?
添加并比较时间。 你通过在浏览器中直接运行的动手代码来练习 Lua Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Lua Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Lua Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「时间运算」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Lua Academy 课中编写并运行代码吗?
能。每节 Lua Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。