--[[
|
|
功能: 用于操作时间的类(比如取当前服务器时间, 取当前客户端时间等)
|
|
作者: 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 " <color="..color..">"..min.."</color> 分"
|
|
local hour
|
|
local d
|
|
if m >= 60 then
|
|
local h = math.floor(m / 60);
|
|
hour = h % 24
|
|
str = hour == 0 and "" or " <color="..color..">"..hour.."</color> 时" .. str
|
|
|
|
if show_second then
|
|
str = str .. " <color="..color..">"..s.."</color> 秒"
|
|
end
|
|
|
|
if h >= 24 and not not_show_day then
|
|
d = math.floor(h/24);
|
|
str = " <color="..color..">"..d.."</color> 天" .. str;
|
|
end
|
|
elseif m > 0 and m < 60 then
|
|
str = " <color="..color..">"..min.."</color> 分"
|
|
if show_second then
|
|
str = str .. " <color="..color..">"..s.."</color> 秒"
|
|
end
|
|
else
|
|
str = str .. " <color="..color..">"..s.."</color> 秒"
|
|
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
|