Skip to content

Latest commit

 

History

History
113 lines (92 loc) · 2.59 KB

Lua_notes_1.md

File metadata and controls

113 lines (92 loc) · 2.59 KB

我最近一两年犯了一个错误, 那就是我会因为觉得事情做得不完美就不去做一件事, 后来我才发现, DONE IS BETTER THAN PERFECT. 哪怕是一点点的积累也是积累, 也是值得的.

这里记录一些过去一段时间使用Lua的时候, 写的一些工具函数, 不一定写得好, 以后有空会回来改的.

--[[
    截取table的一部分
    @param tb1 
	@param first
	@param last 
	@param step	 
    @return 截取的table
]]
function table.slice(tbl, first, last, step)
    local sliced = {}

    for i = first or 1, last or #tbl, step or 1 do
        sliced[#sliced + 1] = tbl[i]
    end

    return sliced
end

--[[
    合并两个table
    @param table1
	@param table2
    @return table1
]]
function table.merge(table1, table2)
    for i = 1, #table2 do
        table1[#table1 + 1] = table2[i]
    end
    return table1
end


--[[
    获取字符串长度 由于编码问题
    @param string
    @return length
]]
function string.get_mixed_string_length(str)
    local len_in_byte = #str    
    local width = 0
    local i = 1
    while(i<=len_in_byte)
    do
        local cur_byte = string.byte(str, i)
        local byte_count = 1
        if cur_byte > 0 and cur_byte < 192 then
            byte_count = 1
        elseif cur_byte >= 192 and cur_byte <= 223 then
            byte_count = 2
        elseif cur_byte >= 224 and cur_byte <= 239 then
            byte_count = 3
        elseif cur_byte >= 240 and cur_byte <= 247 then
            byte_count = 4
        elseif cur_byte >= 248 and cur_byte <= 251 then
        	byte_count = 5    
        elseif cur_byte >= 252 then
        	byte_count = 6    
        end

        i = i + byte_count
        width = width + 1
    end
    return width
end

--[[
    字符串转时间戳
    @param time_str 形如yyyy-mm-dd[ hh:mm[:ss]
    @return unix秒级时间戳
]]
util.str2time = function(time_str)
    local date = ngx.re.match(tostring(time_str), "^(\\d{4})-(\\d{2})-(\\d{2}).*$")
    -- 格式不符合
    if not date then
        return 0
    end
    -- 年月日
    local Y = date[1]
    local m = date[2]
    local d = date[3]

    local hour = ngx.re.match(tostring(time_str), "^.* (\\d{2}):(\\d{2})(:(\\d{2})|)$") or {}
    -- 时分秒
    local H = hour[1] or 0
    local M = hour[2] or 0
    local S = hour[4] or 0

    return os.time({year = Y, month = m, day = d, hour = H, min = M, sec = S})
end

--[[
    时间戳转字符串
    @param uninx秒级时间戳
    @return 时间字符串,形如yyyy-mm-dd hh:mm:ss
]]
util.time2str = function(time)
    return os.date("%Y-%m-%d %H:%M:%S", tonumber(time))
end