本WIKI编辑权限开放,正由 恋与深空Evol攻略组 搭建基础框架ing,期待更多猎人加入WIKI建设!
反馈留言收藏方法加入我们

全站通知:

模块:时间

来自恋与深空WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

此模块的文档可以在模块:时间/doc创建

local p = {}

--格式化日期YYYY-MM-DD(参数1:格式化对象,参数2:分隔符号)
function p.formatDate(frame)
    -- 获取传入的日期参数
    local inputDate = frame.args[1]
    local outputSplit = frame.args[2] or "-"  -- 默认分隔符为"-"
    if not inputDate then
        return "无效日期"
    end

    -- 使用模式匹配来分解日期为年、月、日
    local year, month, day = string.match(inputDate, "(%d+)[%-/](%d+)[%-/](%d+)")

    -- 检查是否成功匹配到年月日
    if not (year and month and day) then
        return string.format("1999%s09%s09", outputSplit, outputSplit)
    end

    -- 格式化日期,确保月份和日期为两位数
    local formattedDate = string.format("%04d%s%02d%s%02d", year, outputSplit, month, outputSplit, day)

    return formattedDate
end

--格式化日期时间YYYY-MM-DD HH:MM
function p.formatDateTime(frame)
    --统一日期分隔符
    local normalizedDateTime = frame.args[1]:gsub("[./-]", "/")

    --提取日期和时间的各个部分:
    local year, month, day, hour, minute = normalizedDateTime:match("(%d+)%/(%d+)%/(%d+)%s*(%d*):?(%d*)")

    -- 年月日检查:
    if not (year and month and day) then
        return string.format("%04d-%02d-%02d %02d:%02d",1999,9,9,9,9)
    end

    --时分的默认处理
    hour = hour ~= "" and hour or "5"
    minute = minute ~= "" and minute or "00"

    -- 使用string.format来确保月、日、小时和分钟都是两位数字:
    local formattedDateTime = string.format("%04d-%02d-%02d %02d:%02d", tonumber(year), tonumber(month), tonumber(day), tonumber(hour), tonumber(minute))

    return formattedDateTime
end

-- 主函数,判断是否超过结束时间
function p.duringDate(frame)
    -- 获取传入的结束时间参数,并格式化
    local formattedEndDate = p.formatDateTime(frame)

    -- 使用os.time函数获取当前时间和结束时间的时间戳
    local currentTime = os.time()
    local year, month, day, hour, minute = formattedEndDate:match("(%d+)-(%d+)-(%d+) (%d+):(%d+)")
    local endTime = os.time({year = tonumber(year), month = tonumber(month), day = tonumber(day), hour = tonumber(hour), min = tonumber(minute)})

    -- 比较当前时间和结束时间
    return currentTime <= endTime
end


--测试用函数
function p.test()
    local mockFrame = {
        args = {
            [1] = "2024/4/22",  -- 位置参数
            ["date"] = "2024.4.1 5:03",  -- 命名参数
        }
    }
    return p.duringDate(mockFrame)  -- 使用位置参数
end

return p