--[[ 功能: 用于操作时间的类(比如取当前服务器时间, 取当前客户端时间等) 作者: deadline ]] TimeUtil = TimeUtil or { eng_faster_time = 0 } local TimeUtil = TimeUtil --[[ 功能: 引擎从起动到现在的时间(每帧更新一次),单位(s) 其它: 作者: deadline ]] function TimeUtil:getClientTime( ) return Status.NowUnscaledTime end --[[ 功能: 获取当前服务器时间(单位:s) 参数: 其它: 作者: deadline ]] function TimeUtil:getServerTime( ) return math.floor((Status.NowUnscaledTime*1000 + self.eng_faster_time)/1000 + 0.5) end --[[ 功能: 引擎从起动到现在的时间(每帧更新一次),单位(ms) 其它: 作者: deadline ]] function TimeUtil:getClientTimeMs( ) return Status.NowUnscaledTime*1000 end --[[ 功能: 获取当前服务器时间(单位:ms) 参数: 其它: 作者: deadline ]] function TimeUtil:getServerTimeMs( ) return Status.NowUnscaledTime*1000 + self.eng_faster_time end --[[ 功能: 提示客户端当前服务器的时间戳 参数: server_time 服务器时间(ms) int 其它: 作者: deadline ]] function TimeUtil:notifyServerTime(server_time) self.eng_faster_time = server_time - Status.NowUnscaledTime*1000 end function TimeUtil:convertTime(times) local timeStr = "" local second = math.modf(times % 60) local minute = math.modf(times/60) if minute >= 60 then times = math.modf(minute / 60); timeStr=timeStr..((times > 9 and times) or "0"..times) timeStr=timeStr..(":") minute= math.modf(minute % 60) timeStr=timeStr..((minute > 9 and minute) or "0"..minute) timeStr=timeStr..(":") timeStr=timeStr..((second > 9 and second) or "0"..second) else timeStr=timeStr..("00:") timeStr=timeStr..((minute > 9 and minute) or "0"..minute) timeStr=timeStr..(":") timeStr=timeStr..((second > 9 and second) or "0"..second) end return timeStr end --[[ 功能:分钟和秒钟的显示,不显示出小时数 作者:zhongdong ]]-- function TimeUtil:convertTimeWithoutHour(times) local timeStr = "" local second = math.modf(times % 60) local minute = math.modf(times/60) if minute >= 60 then times = math.modf(minute / 60); timeStr=timeStr..((times > 9 and times) or "0"..times) timeStr=timeStr..(":") minute= math.modf(minute % 60) timeStr=timeStr..((minute > 9 and minute) or "0"..minute) timeStr=timeStr..(":") timeStr=timeStr..((second > 9 and second) or "0"..second) else -- timeStr=timeStr..("00:") timeStr=timeStr..((minute > 9 and minute) or "0"..minute) timeStr=timeStr..(":") timeStr=timeStr..((second > 9 and second) or "0"..second) end return timeStr end -- 获得当前时间 m:秒 function TimeUtil:timeSec(times) local time = os.date("%X", times) local datearr = Language.split(time,":") local result=datearr[1]*3600+datearr[2]*60+datearr[3] return result end --解析"21:30"这样的字符串,返回{hour:21, min:30} function TimeUtil:ParseHourMinute(time_str) -- local p = string.find(time_str, ":") local ss = Language.split(time_str, ":") local ret = {} ret.hour = tonumber(ss[1]) ret.min = tonumber(ss[2]) return ret end --[[ * 秒转换时间 * @param timeStr 秒数 * @return 格式化时间 ]] function TimeUtil:timeConversion(timeStr, stype) if timeStr == nil then return "" end timeStr = tonumber(timeStr) if timeStr < 0 then timeStr = 0 end local cur_type = stype or "date" local date = os.date("*t", timeStr) local monthStr = date.month < 10 and "0"..date.month or date.month local dateStr = date.day < 10 and "0"..date.day or date.day local hoursStr = date.hour < 10 and "0"..date.hour or date.hour local minutesStr = date.min < 10 and "0"..date.min or date.min local secondStr = date.sec < 10 and "0"..date.sec or date.sec if cur_type == "date" then return date.year .. "-" .. monthStr .. "-" .. dateStr elseif cur_type =="mm-dd" then return monthStr .. "-" .. dateStr elseif cur_type == "mm-dd hh-MM" then return monthStr .. "-" .. dateStr .. " " .. hoursStr .. ":" .. minutesStr elseif cur_type == "yyyy-mm-dd hh-MM" then return date.year .. "-" .. monthStr .. "-" .. dateStr .. " " .. hoursStr .. ":" .. minutesStr elseif cur_type == "yyyy年mm月dd日 hh-MM" then return date.year .. "年" .. monthStr .. "月" .. dateStr .. "日 " .. hoursStr .. ":" .. minutesStr elseif cur_type == "yyyy年mm月dd日 hh" then return date.year .. "年" .. monthStr .. "月" .. dateStr .. "日" .. hoursStr.."时" elseif cur_type == "yyyy-mm-dd" then return date.year.."-"..monthStr.."-"..dateStr elseif cur_type =="yyyy-mm-dd hh:mm:ss" then return date.year .. "-" .. monthStr .. "-" .. dateStr .. " " .. hoursStr .. ":" .. minutesStr .. ":" .. secondStr elseif cur_type == "yyyy年mm月dd日" then return date.year .. "年" .. monthStr .. "月" .. dateStr .. "日" elseif cur_type == "yyyy年mm月dd日 hh:MM:ss" then return date.year .. "年" .. monthStr .. "月" .. dateStr .. "日 " .. hoursStr .. ":" .. minutesStr .. ":" .. secondStr elseif cur_type == "hh-MM" then return hoursStr .. ":" .. minutesStr elseif cur_type == "MM-ss" then return minutesStr .. ":" .. secondStr elseif cur_type == "hh-MM-ss" then return hoursStr..":"..minutesStr .. ":" .. secondStr elseif cur_type =="mm-dd hh:mm" then return monthStr.."-"..dateStr.." "..hoursStr..":"..minutesStr elseif cur_type =="mm月dd日 hh:mm" then return monthStr.."月"..dateStr.."日 "..hoursStr..":"..minutesStr elseif cur_type =="mm/dd hh:mm" then return monthStr.."/"..dateStr.." "..hoursStr..":"..minutesStr elseif cur_type =="yy/mm/dd hh:mm" then return date.year .. "/" .. monthStr .. "/" .. dateStr .. " " .. hoursStr .. ":" .. minutesStr elseif cur_type =="yy/mm/dd" then return date.year .. "/" .. monthStr .. "/" .. dateStr elseif cur_type =="yy/mm/dd hh:mm:ss" then return date.year .. "/" .. monthStr .. "/" .. dateStr .. " " .. hoursStr .. ":" .. minutesStr .. ":" .. secondStr elseif cur_type =="yymmddhhmmss" then return date.year ..monthStr .. dateStr .. hoursStr .. minutesStr .. secondStr elseif cur_type =="mm/dd" then return monthStr .. "/" .. dateStr elseif cur_type =="mm月dd日" then return monthStr.."月"..dateStr.."日" elseif cur_type == "mm.dd" then return monthStr.."."..dateStr elseif cur_type == "mm-dd hh:MM:ss" then return monthStr .. "-" .. dateStr .. " " .. hoursStr .. ":" .. minutesStr .. ":" .. secondStr elseif cur_type =="hh:mm:ss" then return hoursStr .. ":" .. minutesStr .. ":" .. secondStr elseif cur_type =="exfont_hh:mm:ss" then--主题活动副本双倍活动“00时00分00秒”艺术字 return hoursStr .. "h" .. minutesStr .. "m" .. secondStr.."s" elseif cur_type =="hh:mm" then return hoursStr .. ":" .. minutesStr elseif cur_type =="act_hh:mm" then return hoursStr .. "h" .. minutesStr.."m" elseif cur_type =="yyyy.mm.dd hh:mm" then return date.year .. "." .. monthStr .. "." .. dateStr .. " " .. hoursStr .. ":" .. minutesStr elseif cur_type =="mm.dd hh:mm" then return monthStr .. "." .. dateStr .. " " .. hoursStr .. ":" .. minutesStr elseif cur_type == "yyyy.mm.dd" then return date.year .. "." .. monthStr .. "." .. dateStr else return monthStr.."//"..date.day.." "..hoursStr..":"..minutesStr end end --[[ * 秒转换时间 * @param timeStr 精确到毫秒级的时间 * @return 格式化时间 ]] function TimeUtil:timeConversionWithMillisecond(timeStr, stype) if timeStr == nil then return "" end timeStr = tonumber(timeStr) if timeStr < 0 then timeStr = 0 end local cur_type = stype or "date" local timeStr, milli = math.modf(timeStr / 1000) local date = os.date("*t", timeStr) local monthStr = date.month < 10 and "0"..date.month or date.month local dateStr = date.day < 10 and "0"..date.day or date.day local hoursStr = date.hour < 10 and "0"..date.hour or date.hour local minutesStr = date.min < 10 and "0"..date.min or date.min local secondStr = date.sec < 10 and "0"..date.sec or date.sec local str = timeStr % 86400000 local len = string.len(str) local millisecond = string.sub(str, len - 2, len) if cur_type =="yy/mm/dd hh:mm:ss.ms" then return date.year .. "/" .. monthStr .. "/" .. dateStr .. " " .. hoursStr .. ":" .. minutesStr .. ":" .. secondStr .. "." .. millisecond elseif "hh:mm:ss.ms" then return hoursStr .. ":" .. minutesStr .. ":" .. secondStr .. "." .. millisecond else return monthStr.."//"..date.day.." "..hoursStr..":"..minutesStr end end --[[ * second 秒 * formatStr 格式化字符串,hh替换为小时, mm替换为分钟, ss替换为秒 * addZero 是否补0 ]] function TimeUtil:timeConvert(second, dateType, addZero) local function appendZero(time) return string.format("%02d", time) end dateType = dateType or "hh小时mm分ss秒" if addZero==nil then addZero=true else addZero = addZero end local h = math.floor(second / 3600) local m = math.floor((second % 3600) / 60) local s = second % 60; if addZero == true then h = appendZero(h) m = appendZero(m) s = appendZero(s) end local str = string.gsub(dateType, "hh", h) str = string.gsub(str, "mm", m) str = string.gsub(str, "ss", s) return str end --[[ * second 秒 * formatStr 格式化字符串, mm替换为分钟, ss替换为秒 * addZero 是否补0 ]] function TimeUtil:timeConvert2(second, dateType, addZero) local function appendZero(time) return string.format("%02d", time) end dateType = dateType or "mm分ss秒" if addZero==nil then addZero=true else addZero = addZero end local m = math.floor((second % 3600) / 60) local s = second % 60; if addZero == true then m = appendZero(m) s = appendZero(s) end local str = "" if tonumber(m) > 0 then str = string.gsub(dateType, "mm", m) else str = "ss秒" end str = string.gsub(str, "ss", s) return str end --[[ @param:second @retuen *天*时*分 ]] function TimeUtil:qianggouTimeLeft2(second, hide_second) local s=second%60 local m = math.floor(second/60); local min = m % 60 if hide_second then min = 0 end local str = min == 0 and "" or min .. "分"; local hour local d if m >= 60 then local h = math.floor(m/60); hour = h % 24 str = (hour == 0 and "" or hour .. "时") .. str; if h >= 24 then d = math.floor(h/24); str = d .. "天" .. str; end elseif m > 0 and m < 60 then str = m .. "分" .. s .. "秒" else str = s .. "秒" end return str,(d or 0),(hour or 0),(min or 0),(s or 0) end --[[ @param:second @retuen *时*分 ]] function TimeUtil:timeConvert6(second, show_second, not_show_day) if second == nil then return "" end local s = second % 60 local m = math.floor(second / 60); local min = m % 60 local str = min == 0 and "" or min .. "分" local hour local d if m >= 60 then local h = math.floor(m / 60); hour = h % 24 str = hour == 0 and "" or hour .. "时" .. str if show_second then str = str .. s .. "秒" end if h >= 24 and not not_show_day then d = math.floor(h/24); str = d .. "天" .. str; end elseif m > 0 and m < 60 then str = m .. "分" if show_second then str = str .. s .. "秒" end else str = str .. s .. "秒" end if second <= 0 then str = 0 end return str end --[[ @param:second @retuen *时*分(带颜色) ]] function TimeUtil:timeConvertColor6(second, show_second, not_show_day, color, mask_empty) if second == nil then return "" end local s = second % 60 local m = math.floor(second / 60); local min = m % 60 local str = min == 0 and "" or " "..min.." 分" local hour local d if m >= 60 then local h = math.floor(m / 60); hour = h % 24 str = hour == 0 and "" or " "..hour.." 时" .. str if show_second then str = str .. " "..s.." 秒" end if h >= 24 and not not_show_day then d = math.floor(h/24); str = " "..d.." 天" .. str; end elseif m > 0 and m < 60 then str = " "..min.." 分" if show_second then str = str .. " "..s.." 秒" end else str = str .. " "..s.." 秒" end if second <= 0 then str = 0 end if mask_empty then str = string.gsub( str, " ", "" ) end return str end --[[ @param:second @retuen *天*时 ]] function TimeUtil:timeConvert7(second) if second == nil then return "" end local s = second % 60 local m = math.floor(second / 60); local min = m % 60 local str = min == 0 and "" or min .. "分" local hour local d if m >= 60 then local h = math.floor(m / 60); hour = h % 24 str = hour == 0 and "" or hour .. "小时" .. str if h >= 24 then d = math.floor(h/24); str = d .. "天" .. str; end elseif m > 0 and m < 60 then str = m .. "分" end if second <= 0 then str = 0 end return str end --[[ @param:second @有天数则显示*天00:00,没有则显示00:00:00 @retuen *天00:00:00 @day_show_second显示*天00:00:00 ]] function TimeUtil:timeConvert3(second,day_show_second) local s=second%60 local min = math.floor(second/60)%60 local hour = math.floor(second/3600)%24 local day = math.floor(second/86400) local str = "" if day > 0 then--显示*天00:00 if not day_show_second then str = string.format("%s天%02d:%02d",day,hour,min) else str = string.format("%s天%02d:%02d:%02d",day,hour,min,s) end else--显示00:00:00 str = string.format("%02d:%02d:%02d",hour,min,s) end return str end --[[ @param:second @有天数则显示*天00:00:00,没有则显示00:00:00 @retuen *天00:00:00 ]] function TimeUtil:timeConvert4(second) local s=second%60 local s_str = s == 0 and ":00" or string.format(":%02d",s); local m = math.floor(second/60); local min = m % 60 local str = min == 0 and ":00" or string.format(":%02d",min); local hour local d if m >= 60 then local h = math.floor(m/60); hour = h % 24 str = (hour == 0 and ":00" or string.format("%02d",hour))..str; if h >= 24 then d = math.floor(h/24); str = d .. "天" .. str..s_str; if d >= 7 then str = "超时" end else str = str..s_str end else str = "00"..str..s_str end return str end --[[ @des 将时间字符串转换为时间戳(用到的格式可以自己加上) @author ]] function TimeUtil:ConvertFmStringToTime(str,ipattern) --local pattern1 = "(%d+)%-(%d+)%-(%d+)T(%d+):(%d+):(%d+)([%+%-])(%d+)%:(%d+)" local pattern = {} pattern[1] = "(%d+)/(%d+)/(%d+)%s+(%d+):(%d+)" --对应2013/6/8 23:59 pattern[2] = "(%d+)@(%d+)@(%d+)@(%d+)@(%d+)" --对应2013@6@8@23@59 local xyear, xmonth, xday, xhour, xminute,xsec = string.match(str,pattern[ipattern]) local convertedTimestamp = os.time({year = xyear, month = xmonth, day = xday, hour = xhour, min = xminute,sec = xsec}) return convertedTimestamp; end --[[ @describtion:获得什么时候前 @param:服务器传来的时间戳time @return:什么前 @author:hjp ]] function TimeUtil:GetTimeStrByServerTime( time ) local dec_time = self:getServerTime() - time if dec_time <= 0 then return "刚刚" end local tem = 0 local month = math.floor(dec_time / (3600*24*30)) tem = dec_time % (3600*24*30) local day = math.floor(tem / (3600 * 24)) tem = tem % (3600*24) local h = math.floor(tem / 3600) tem = tem % 3600 local m = math.floor(tem / 60) tem = tem % 60 local s = tem if month ~= 0 then return month .. "月前" elseif day ~= 0 then return day .. "天前" elseif h ~= 0 then return h .. "小时前" elseif m ~= 0 then return m .. "分钟前" elseif s ~= 0 then return s .. "秒前" else return "" end end --[[ @describtion:获得什么时候前 @param:服务器传来的时间戳time @return:什么前 @author:hjp ]] function TimeUtil:GetTimeAgoStr( dec_time ) if dec_time <= 0 then return "刚刚" end local tem = 0 local month = math.floor(dec_time / (3600*24*30)) tem = dec_time % (3600*24*30) local day = math.floor(tem / (3600 * 24)) tem = tem % (3600*24) local h = math.floor(tem / 3600) tem = tem % 3600 local m = math.floor(tem / 60) tem = tem % 60 local s = tem if month ~= 0 then return month .. "月前" elseif day ~= 0 then return day .. "天前" elseif h ~= 0 then return h .. "小时前" elseif m ~= 0 then return m .. "分钟前" elseif s ~= 0 then return s .. "秒前" else return "" end end --获取今日三点的时间戳 function TimeUtil:GetToDayThreeHourStr( ... ) local now=self:getServerTime() local date = os.date("*t", now) local date_three={year=date.year,month=date.month,day=date.day,hour=3,min=0,sec=0} return os.time(date_three) end --N(0-24)--获取今日N点的时间戳 function TimeUtil:GetToDayNHourStr( hour_num ) local now=self:getServerTime() local date = os.date("*t", now) local date_n = {year=date.year,month=date.month,day=date.day,hour=hour_num,min=0,sec=0} return os.time(date_n) end --N(0-24)--获取当前的小时数 function TimeUtil:GetHourNow( ) local now=self:getServerTime() local date = os.date("*t", now) return date.hour end --转化时间,得到天或是分钟 function TimeUtil:timeConvert5(second) local s = second % 60 local m = math.floor(second / 60); local min = m % 60 local str = "" local hour local d if m >= 60 then local h = math.floor(m/60); hour = h % 24 str = hour == 0 and "" or hour .. "小时" if h >= 24 then d = math.floor(h/24); str = d .. "天" end else -- str = "小于1小时" str = m .. "分钟" end return str end -- --转化时间,得到(XX天XX小时 或XX小时XX分 或XX分) function TimeUtil:timeConvert7(second) local s = second % 60 local m = math.floor(second / 60); local min = m % 60 local str = "" local hour local d if m >= 60 then local h = math.floor(m/60); hour = h % 24 str = hour == 0 and "" or hour .. "小时" .. min .. "分" if h >= 24 then d = math.floor(h/24); str = d .. "天" .. hour.. "小时" end else str = min .. "分" if min == 0 then str = "1分" end end return str end function TimeUtil:timeConvert12(time) local dateStr = math.floor(time / 60 / 60 / 24) local hoursStr = math.floor(time / 60 / 60) % 24 local minutesStr = math.floor(time / 60) % 60 local secondStr = time % 60 if dateStr > 0 then return string.format("%s天%s时", dateStr, hoursStr) else if tonumber(hoursStr) < 10 then hoursStr = 0 .. hoursStr end if tonumber(minutesStr) < 10 then minutesStr = 0 .. minutesStr end if tonumber(secondStr) < 10 then secondStr = 0 .. secondStr end return hoursStr ..":" .. minutesStr .. ":" ..secondStr end end function TimeUtil:timeConvert13(time) local dateStr = math.floor(time / 60 / 60 / 24) local hoursStr = math.floor(time / 60 / 60) % 24 local minutesStr = math.floor(time / 60) % 60 local secondStr = time % 60 if dateStr > 0 then return string.format("%s天%s时%s分", dateStr, hoursStr,minutesStr) else if tonumber(hoursStr) < 10 then hoursStr = 0 .. hoursStr end if tonumber(minutesStr) < 10 then minutesStr = 0 .. minutesStr end if tonumber(secondStr) < 10 then secondStr = 0 .. secondStr end return hoursStr ..":" .. minutesStr .. ":" ..secondStr end end function TimeUtil:timeConvert14(time) local dateStr = math.floor(time / 60 / 60 / 24) local hoursStr = math.floor(time / 60 / 60) % 24 local minutesStr = math.floor(time / 60) % 60 local secondStr = time % 60 if dateStr > 0 then return string.format("%s天%s时", dateStr, hoursStr) elseif hoursStr > 0 then return string.format("%s时%s分", hoursStr,minutesStr) else -- if tonumber(hoursStr) < 10 then hoursStr = 0 .. hoursStr end if tonumber(minutesStr) < 10 then minutesStr = 0 .. minutesStr end if tonumber(secondStr) < 10 then secondStr = 0 .. secondStr end return minutesStr .. ":" ..secondStr -- return hoursStr ..":" .. minutesStr .. ":" ..secondStr end end function TimeUtil:timeConvert15(time) local dateStr = math.floor(time / 60 / 60 / 24) local hoursStr = math.floor(time / 60 / 60) % 24 local minutesStr = math.floor(time / 60) % 60 local secondStr = time % 60 local str = "" if dateStr > 0 then str = dateStr .. "天" str = hoursStr > 0 and str .. hoursStr .. "时" or str str = minutesStr > 0 and str .. minutesStr .. "分" or str else str = hoursStr > 0 and str .. hoursStr .. "时" or str str = minutesStr > 0 and str .. minutesStr .. "分" or str str = secondStr > 0 and str .. secondStr .. "秒" or str end return str end function TimeUtil:timeConvert16(time) local dateStr = math.floor(time / 60 / 60 / 24) local hoursStr = math.floor(time / 60 / 60) % 24 local minutesStr = math.floor(time / 60) % 60 local secondStr = time % 60 if dateStr > 0 then return string.format("%s天%s时%s分", dateStr, hoursStr,minutesStr) else -- if tonumber(hoursStr) < 10 then hoursStr = 0 .. hoursStr end -- if tonumber(minutesStr) < 10 then minutesStr = 0 .. minutesStr end -- if tonumber(secondStr) < 10 then secondStr = 0 .. secondStr end return hoursStr .."时" .. minutesStr .. "分" ..secondStr.."秒" end end function TimeUtil:timeConvert17(time, color) local dateStr = math.floor(time / 60 / 60 / 24) local hoursStr = math.floor(time / 60 / 60) % 24 local minutesStr = math.floor(time / 60) % 60 local secondStr = time % 60 local str = "" if color then if dateStr > 0 then str = HtmlColorTxt(dateStr , color) .. "天" str = hoursStr > 0 and str .. HtmlColorTxt(hoursStr , color) .. "时" or str elseif hoursStr > 0 then str = hoursStr > 0 and str .. HtmlColorTxt(hoursStr , color) .. "时" or str str = minutesStr > 0 and str .. HtmlColorTxt(minutesStr , color) .. "分" or str else str = minutesStr > 0 and str .. HtmlColorTxt(minutesStr , color) .. "分" or str str = secondStr > 0 and str .. HtmlColorTxt(secondStr , color) .. "秒" or str end else if dateStr > 0 then str = dateStr .. "天" str = hoursStr > 0 and str .. hoursStr .. "时" or str str = minutesStr > 0 and str .. minutesStr .. "分" or str elseif hoursStr > 0 then str = hoursStr > 0 and str .. hoursStr .. "时" or str str = minutesStr > 0 and str .. minutesStr .. "分" or str else str = minutesStr > 0 and str .. minutesStr .. "分" or str str = secondStr > 0 and str .. secondStr .. "秒" or str end end return str end -- 目标<=现在->过去 false function TimeUtil:ConfigTimeCompare(timeStr, now_time) local dec_time = now_time or self:getServerTime() dec_time = self:timeConversion(dec_time,"yymmddhhmmss") timeStr = string.gsub(timeStr,"%-","") timeStr = string.gsub(timeStr,"%:","") -- timeStr = Trim(timeStr) return tonumber(timeStr) > tonumber(dec_time) end function TimeUtil:GetWeekStrNum(week) local week_list = {"一","二","三","四","五","六","日"} return week_list[week] end --获取未来某一天0点时间戳 function TimeUtil:GetFutureZeroStamp(future_days) local cur_timestamp = os.time() local one_hour_timestamp = 24*60*60 local temp_time = cur_timestamp + one_hour_timestamp * future_days local temp_date = os.date("*t", temp_time) temp_date.hour = 0 temp_date.min = 0 temp_date.sec = 0 return os.time(temp_date) end --获取未来某一天0点时间戳(使用服务器时间戳去计算) function TimeUtil:GetFutureZeroStampServer(future_days) local cur_timestamp =self:getServerTime() local one_hour_timestamp = 24*60*60 local temp_time = cur_timestamp + one_hour_timestamp * future_days local temp_date = os.date("*t", temp_time) temp_date.hour = 0 temp_date.min = 0 temp_date.sec = 0 return os.time(temp_date) end --获取未来某一天4点时间戳(使用服务器时间戳去计算) function TimeUtil:GetFutureFourStampServer(future_days) local cur_timestamp =self:getServerTime() local one_hour_timestamp = 24*60*60 local temp_time = cur_timestamp + one_hour_timestamp * future_days local temp_date = os.date("*t", temp_time) temp_date.hour = 4 temp_date.min = 0 temp_date.sec = 0 return os.time(temp_date) end --[[ @param:second @return 00:00 ]] function TimeUtil:timeConvert8(second) local s=second%60 local s_str = s == 0 and ":00" or string.format(":%02d",s); local m = math.floor(second/60); local min = m % 60 local str = min == 0 and "00" or string.format("%02d",min); str = str..s_str return str end --[[ @param:second @retuen *时*分 ]] function TimeUtil:timeConvert9(second) if second == nil then return "" end local s = second % 60 local m = math.floor(second / 60); local min = m % 60 local str = min == 0 and "" or min .. "分" local hour local d if m >= 60 then local h = math.floor(m / 60); hour = h % 24 str = hour == 0 and "" or hour .. "小时" .. str if h >= 24 then d = math.floor(h/24); str = d .. "天" end elseif m > 0 and m < 60 then if s > 0 then str = m .. "分" .. s .. "秒" else str = m .. "分" end else if s > 0 then str = str .. s .. "秒" end end if second <= 0 then str = 0 end return str end --[[ @param:second @retuen *时*分 ]] function TimeUtil:timeConvert10(second, show_second) if second == nil then return "" end local s = second % 60 local m = math.floor(second / 60); local min = m % 60 local str = min == 0 and "" or min .. "分" local hour local d if m >= 60 then local h = math.floor(m / 60); hour = h % 24 str = hour == 0 and "" or hour .. "时" .. str if show_second then str = str .. s .. "秒" end elseif m > 0 and m < 60 then str = m .. "分" if show_second then str = str .. s .. "秒" end else if show_second then str = str .. s .. "秒" else str = "0" .. "分" end end if second <= 0 then str = 0 end return str end --[[ @param:second @retuen 00时00分 ]] function TimeUtil:timeConvert11(second, show_second) if second == nil then return "" end local s = second % 60 local m = math.floor(second / 60); local min = m % 60 local str = min == 0 and "" or string.format("%02d",min) .. "分" local hour local d local h = math.floor(m / 60); if m >= 60 then hour = h % 24 str = hour == 0 and "" or string.format("%02d",h) .. "时" .. string.format("%02d",min).."分" if show_second then str = str .. s .. "秒" end elseif m > 0 and m < 60 then str = string.format("%02d",h) .. "时" .. string.format("%02d",m).."分" if show_second then str = str .. s .. "秒" end else if show_second then str = str .. s .. "秒" else str = "00时01分" end end if second <= 0 then str = "00时00分" end return str end --[[ @param:second @retuen 00天00时00分00秒 ]] function TimeUtil:qianggouTimeLeft3(second, hide_second) local s=second%60 local m = math.floor(second/60); local min = m % 60 if hide_second then min = 0 end local str = min == 0 and "" or string.format("%02d",min) .. "分"..string.format("%02d",s) .. "秒"; local hour local d if m >= 60 then local h = math.floor(m/60); hour = h % 24 str = (hour == 0 and "" or string.format("%02d",hour) .. "时") .. str; if h >= 24 then d = math.floor(h/24); str = string.format("%02d",d) .. "天" .. str; end elseif m > 0 and m < 60 then str = "00天00时"..string.format("%02d",m) .. "分" .. string.format("%02d",s) .. "秒" else str = "00天00时00分"..string.format("%02d",s) .. "秒" end return str,(d or 0),(hour or 0),(min or 0),(s or 0) end --根据开服第几天获取周几 function TimeUtil:GetWeekStrByOpenDay( day ) day = tonumber(day) local openDay = ServerTimeModel:getInstance():GetOpenServerDay() local curTime = TimeUtil:getServerTime() local targetTime = curTime+(day-openDay)*24*60*60 local week = os.date("%w", targetTime) return week end --根据合服第几天获取周几 function TimeUtil:GetWeekStrByMergeDay( day ) day = tonumber(day) local openDay = ServerTimeModel:getInstance():GetMergeServerDay() local curTime = TimeUtil:getServerTime() local targetTime = curTime+(day-openDay)*24*60*60 local week = os.date("%w", targetTime) return week end --今天是周几 function TimeUtil:GetCurrentWeekDay() local curTime = TimeUtil:getServerTime() local targetTime = curTime local week = os.date("%w", targetTime) return week end --获取本地的时区偏移,缓存一下,减少os.date的内存分配 function TimeUtil:GetLocalOffZone( ) if not self.local_off_zone then local now_time = os.time() local now_time_table = os.date("*t", now_time) local local_zone = os.difftime(now_time, os.time(os.date("!*t", now_time)))/3600 local off_dst = now_time_table.isdst and 1 or 0 --夏令时 self.local_off_zone = self:GetSereverZone() - (local_zone + off_dst) end return self.local_off_zone end --获取服务器时间转化为本地时区的时间 function TimeUtil:GetZoneTime( ) local off_zone = self:GetLocalOffZone() local cur_date = self:getServerTime() + off_zone*3600 -- print("tanar - [ TimeUtil ] [518] ==> local_zone: ",local_zone, off_zone, now_time_table.isdst) return cur_date end --获取服务器所在时区,国内版本东八区,其他语言版本再改 function TimeUtil:GetSereverZone( ) return 8 end --转换毫秒倒计时(00:00.00) function TimeUtil:convertMillisecondTime( times,no_show_dot_num ) local timeStr = "" local second = math.modf(times % 60) local minute = math.modf(times/60) timeStr=timeStr..((minute > 9 and minute) or "0"..minute) timeStr=timeStr..(":") timeStr=timeStr..((second > 9 and second) or "0"..second) if not no_show_dot_num then local int_times = math.floor(times) local dot_num = times - int_times if dot_num > 0.1 then timeStr = timeStr..(".")..math.floor(dot_num*100) elseif dot_num > 0 and dot_num < 0.01 then timeStr = timeStr..(".0")..math.floor(dot_num*100) else timeStr = timeStr..(".00") end end return timeStr end --[[ @param:second @retuen *时*分 ]] function TimeUtil:timeConvertAct(second) local s=second%60 local m = math.floor(second/60); local min = m % 60 if hide_second then min = 0 end local str = string.format("%02d",min) .. "m"..string.format("%02d",s) .. "s"; local hour local d if m >= 60 then local h = math.floor(m/60); str = string.format("%02d",h) .. "h" .. str; elseif m > 0 and m < 60 then str = "00h"..string.format("%02d",m) .. "m" .. string.format("%02d",s) .. "s" else str = "00h00m"..string.format("%02d",s) .. "s" end return str end --N(0-24)--获取今日N点的时间戳 function TimeUtil:IsToday( time ) local now=self:getServerTime() local now_date = os.date("*t", now) local date = os.date("*t", time) return now_date.year == date.year and now_date.month == date.month and now_date.day == date.day end --[[ @param:second @显示00:00:00 @retuen 00:00:00 ]] function TimeUtil:timeConvert33(second) local s=second%60 local min = math.floor(second/60)%60 local hour = math.floor(second/3600) local str = string.format("%02d:%02d:%02d",hour,min,s) return str end --获取当前的时,分,秒 function TimeUtil:getCurHourMinSce() local time = self:getServerTime( ) local date = os.date("*t", time) return date.hour,date.min,date.s end