Lua - 判断时间是否在两个时间戳之间
2017-7-7 13:13:49
收藏:0
阅读:108
评论:2
给出以下示例:
--测试 当前 开始 结束 是否在两者之间
--1 10:00 09:00 12:00 true
--2 01:00 07:34 09:54 false
--3 17:00 16:00 03:00 true
--4 10:00 10:00 15:00 true
--5 10:30 10:00 10:30 true
在 Lua 中,如何创建一个可以调用的函数:
BetweenTimes("10:00", "09:00","12:00")
在这种情况下(测试1)返回 true。我遇到的问题是测试用例3。
我可以假设第一个时间永远在第二个时间之前。
我想这可能就是它:
local function parse_time(str)
local hour, min = str:match("(%d+):(%d+)")
return os.time{hour = hour, min = min, day = 1, month = 1, year = 1970}
end
local function BetweenTimes(between, start, stop)
between = parse_time(between)
start = parse_time(start)
stop = parse_time(stop)
if stop < start then
return (start <= between) or (between <= stop)
else
return (start <= between) and (between <= stop)
end
end
print(BetweenTimes("10:00", "09:00", "12:00")) -- true
print(BetweenTimes("15:00", "09:00", "12:00")) -- false
print(BetweenTimes("15:00", "09:00", "01:00")) -- true
print(BetweenTimes("10:00", "10:00", "11:00")) -- true
print(BetweenTimes("11:00", "10:00", "11:00")) -- true
print(BetweenTimes("19:00", "17:00", "03:30")) -- true
print(BetweenTimes("03:00", "04:00", "05:30")) -- false
print(BetweenTimes("03:00", "02:00", "05:30")) -- true
print(BetweenTimes("01:00", "09:00", "02:30")) -- true
或者只需使用以下代码即可删除 os.time():
local function BetweenTimes(between, start, stop)
local start = string.gsub(start,":", "")
local between = string.gsub(between,":", "")
local stop = string.gsub(stop,":", "")
if stop < start then
return (start <= between) or (between <= stop)
else
return (start <= between) and (between <= stop)
end
end
点赞
用户936986
为什么你在只有小时和分钟的情况下还使用日期?除非你期望在将来处理其他时间单位,否则简单的乘法就足够了。
local function parse_time(str)
local hour, min = str:match("(%d+):(%d+)")
return min * 60 + hour
end
我不会从 Henri Menke 的答案中复制 BetweenTimes - 它完全相同,唯一的更改在于我的 parse_time 返回的是分钟,而不是秒:
stop = stop + 24*60
2017-07-07 13:23:43
评论区的留言会收到邮件通知哦~
推荐文章
- 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 代码?

你的方法看起来过于复杂了。只需要从字符串中解析出小时和分钟,然后将其转换为 UNIX 时间戳。这些是常规的整数,你可以使用
<和>很容易地进行比较。local function parse_time(str) local hour, min = str:match("(%d+):(%d+)") return os.time{hour = hour, min = min, day = 1, month = 1, year = 1970} end local function BetweenTimes(between, start, stop) between = parse_time(between) start = parse_time(start) stop = parse_time(stop) if stop < start then stop = stop + 24*60*60 -- 添加 24 小时 end return (start <= between) and (between <= stop) end print(BetweenTimes("10:00", "09:00", "12:00")) -- true print(BetweenTimes("15:00", "09:00", "12:00")) -- false print(BetweenTimes("15:00", "09:00", "01:00")) -- true