0Pricing
Lua Academy · 课时

时间运算

添加并比较时间。

时间运算 是 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. os.time 与 os.date
  2. 格式化日期
  3. 时间运算
  4. 测量持续时间
← 返回 Lua Academy