You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 22:50:22