如何让Lua os.time与JavaScript Date.now输出相同时间值?
Lua os.time() 与 JavaScript Date.now() 差异及统一方法
核心差异原因
- Lua 的
os.time()默认返回Unix时间戳(单位:秒):即从1970年1月1日00:00:00 UTC到当前时间的总秒数。 - JavaScript 的
Date.now()返回Unix时间戳(单位:毫秒):同一时间点的总毫秒数,数值是Lua结果的1000倍,因此会多三位数字。
实现输出一致的简单函数
1. Lua 输出与 Date.now() 一致的毫秒数
如果不需要毫秒级精度,直接将秒数乘以1000即可:
-- 获取当前时间的毫秒级时间戳(秒级精度) function get_now_ms() return os.time() * 1000 end
如果需要更精确的毫秒值(Lua 5.3+ 支持),可以利用纳秒字段转换:
-- 获取当前时间的高精度毫秒级时间戳 function get_now_precise_ms() local sec = os.time() -- %N 取当前时间的纳秒数,部分平台可能不支持该格式 local nanosec = tonumber(os.date("%N")) or 0 return sec * 1000 + math.floor(nanosec / 1000000) end
2. JavaScript 输出与 os.time() 一致的秒数
将毫秒数除以1000后取整即可:
// 获取当前时间的秒级时间戳 function getNowSec() { return Math.floor(Date.now() / 1000); }
os.time() 表参数构造说明
os.time() 可以传入一个表,将指定时间转换为Unix时间戳(秒)。表必须包含以下必填字段,可选字段用于更精确的时间:
- 必填:
year(年份,如2024)、month(月份,1-12)、day(日期,1-31) - 可选:
hour(小时,0-23)、min(分钟,0-59)、sec(秒数,0-59)
示例:
-- 转换2024年5月20日14:30:00为Unix时间戳 local target_timestamp = os.time({ year = 2024, month = 5, day = 20, hour = 14, min = 30, sec = 0 })
内容的提问来源于stack exchange,提问作者bazante
相关产品推荐
相关产品推荐

