JS 中的定制日期和时间解决方案
2020-7-27 19:14:51
收藏:0
阅读:117
评论:1
我有一段 lua 代码
<script src="https://github.com/fengari-lua/fengari-web/releases/download/v0.1.0/fengari-web.js"></script>
<div>Ixnay 当地时间为 <span id="IxTime"></span></div>
<script type="application/lua">
local epoch = os.time{year=2014,day=1,month=1}
-- equation: x + y = 2016*365+182; x + z = 2024*365; z = y * 4
-- 这个假定 4 倍速率过去的时间
-- 尝试使用 3 倍速率会导致在时间戳之后无法提供准确的结果
function conv(t)
local time = os.time(t)
local seconds_since_epoch = time - epoch
return seconds_since_epoch * 4 + epoch
end
js.global.document:querySelector("#IxTime").innerHTML = os.date(" %Y-%m-%d %H:%M:%S", conv(os.date('*t', os.time())))
</script>
由于 lua 的限制,Y2k38 问题会在 2038 年之后无法进行计算。我对 javascript 不是很了解,但我知道它拥有更强大的日期/时间机制。我已经试过一些调试,但遇到了两个主要问题:
我无法弄清楚如何创建更快的时间速率 (时间应该比现实时间大约快 4 倍)
我似乎无法让时间从我指定的 2014 年 1 月 1 日的纪元时间开始运行
任何帮助都将不胜感激!
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

问题在于,在 64 位操作系统下编译的常规 Lua 中不存在问题。但 Fengari 中的整数为 32 位且
os.date()接受整数时间,因此为了满足 2k38 限制,需要将时间往前推 4 * N 年。解决方法: 将时间向前推 4 * N 年,以使其在 2038 年之前。
<script src="https://github.com/fengari-lua/fengari-web/releases/download/v0.1.4/fengari-web.js"></script> <div>The local time in Ixnay: <span id="IxTime"></span></div> <script type="application/lua"> local epoch = os.time{year=2014,day=1,month=1} function conv(t) local time = os.time(t) local seconds_since_epoch = time - epoch return seconds_since_epoch * 4.0 + epoch end local four_years = os.time{year=2024,day=1,month=1} - os.time{year=2020,day=1,month=1} local function time_to_string(seconds_since_epoch) local k = math.max(0, math.ceil((seconds_since_epoch - math.maxinteger) / four_years)) local s = seconds_since_epoch - k * four_years return os.date(" %%s-%m-%d %H:%M:%S", s):format(tostring(tonumber(os.date("%Y", s)) + 4*k)) end js.global.document:querySelector("#IxTime").innerHTML = time_to_string(conv(os.date('*t'))) </script>