lua的几个时间相关处理函数

  随手写的,项目中没用,不一定对,只作参考。

--游戏时间相关函数

local gt = {}

local math = math
local ONE_MINUTE = 60
local ONE_HOUR = ONE_MINUTE * ONE_MINUTE
local ONE_DAY = ONE_HOUR * 24
local ONE_WEEK = ONE_DAY*7

--本地时间2000-01-01 00:00对应UTC
local sec_2000 = os.time{year=2000,month=1,day=1,hour=0,min=0,sec=0}
local refresh_2000 = sec_2000 + ONE_HOUR*4
local monday_2000 = os.time{year=2000,month=1,day=3,hour=0,min=0,sec=0} --第一个周一

-- Compute the difference in seconds between local time and UTC.
function gt.get_timezone()
  local now = os.time()
  return os.difftime(now, os.time(os.date("!*t", now)))
end

local TIMEZONE = gt.get_timezone()

--这是获取2000-01-01 00:00:00以来所过的天数,根据系统时区变化
function gt.get_day_from_2000()
    return math.floor( (ev.time - sec_2000)/ONE_DAY )
end

--这是获取2000-01-01 00:00:00以来所过的秒数,根据系统时区变化
function gt.get_second_from_2000()
    return ev.time - sec_2000
end

--这是获取2000-01-01 04:00:00以来所过的天数,根据系统时区变化
function gt.get_refresh_day_from_2000()
    return math.ceil( (ev.time - refresh_2000)/ONE_DAY )
end

--这是获取2000-01-01 00:00:00以来所过的周数,根据系统时区变化
function gt.get_week_from_2000()
    return math.ceil( (ev.time - monday_2000)/ONE_WEEK )
end

--获取当天的0时0分0秒的时间
function gt.get_begin_of_day()
    local local_t = ev.time + TIMEZONE
    return local_t - local_t%ONE_DAY
end

--获取下分钟的时间
function gt.get_next_minite()
    return ev.time - ev.time%ONE_MINUTE + ONE_MINUTE
end

--获取下小时的时间
function gt.get_next_hour()
    return ev.time - ev.time%ONE_HOUR + ONE_HOUR
end

--获取下一次的4时0分0秒的时间
function gt.get_next_refresh_time()
    local pass = (ev.time - refresh_2000)%ONE_DAY  --相对04:00的已过秒数

    return ev.time - pass + ONE_DAY
end

--获得星期几 1星期一
--TODO 这里星期天是7
function gt.get_weekday()
    local sec = (ev.time - monday_2000)%ONE_WEEK
    if sec > 0 then
        return math.ceil( sec/ONE_DAY)
    end

    return 1  --周日00:00才会这样,算周一
end

--获取当天的秒数,范围是(0 <= sec < 24 * 3600)
function gt.get_second_of_day()
    return (ev.time + TIMEZONE)%ONE_DAY
end

--比较a-b时间是否>=num天
function gt.compare_days(a,b,num)
    local ds = math.floor((a - sec_2000)/ONE_DAY) - math.floor((b - sec_2000)/ONE_DAY)
    return ds >= num or false
end

return gt
时间: 2025-01-10 13:37:48

lua的几个时间相关处理函数的相关文章

Lua 学习笔记(五)函数

函数的定义:在Lua中,函数是一种对语句和表达式进行抽象的主要机制. 一.函数基本用法 在Lua中, 1.函数既可以完成某项特定的任务.(被视为一条语句) 2.也可以只做一些计算并返回结果.(被视为一句表达式) 格式: function function_name( ... ) -- body     end ---- 等同于 function_name=function( ... )  --body  end 声明: function关键字声明函数.end 关键字定义函数体的结束位置.( ..

Cocos2d-x下Lua调用自定义C++类和函数的最佳实践 -- 转

原地址: http://blog.segmentfault.com/hongliang/1190000000631630 Cocos2d-x下Lua调用自定义C++类和函数的最佳实践 关于cocos2d-x下Lua调用C++的文档看了不少,但没有一篇真正把这事给讲明白了,我自己也是个初学者,摸索了半天,总结如下: cocos2d-x下Lua调用C++这事之所以看起来这么复杂.网上所有的文档都没讲清楚,是因为存在5个层面的知识点: 1.在纯C环境下,把C函数注册进Lua环境,理解Lua和C之间可以

【小白学Lua】之Lua变长参数和unpack函数

一.简介 Lua的变长参数和unpack函数在实际的开发中应用的还挺多的,比如在设计print函数的时候,需要支持对多个变量进行打印输出,这时我们就需要用到Lua中的变长参数和unpack函数了. 二.Lua变长参数与unpack函数 Lua中支持可变参数,用 ... 表示.比如定义下面的这样一个函数: local function func1(...) end 当然它也支持在变长参数前面添加固定参数: local function func1(var,...) --dosomething en

cocos进阶教程(1)Lua调用自定义C++类和函数的最佳实践

第一层:纯C环境下,把C函数注册进Lua环境 a.lua 文件 print(foo(99)) a.c 文件 #include <lua.h> #include <lualib.h> #include <lauxlib.h> int foo(lua_State *L) { int n = lua_tonumber(L, 1); lua_pushnumber(L, n + 1); return 1; } int main() { lua_State *L = lua_ope

Cocos2d-x下Lua调用自定义C++类和函数的最佳实践

原文地址:http://segmentfault.com/a/1190000000631630 关于cocos2d-x下Lua调用C++的文档看了不少,但没有一篇真正把这事给讲明白了,我自己也是个初学者,摸索了半天,总结如下: cocos2d-x下Lua调用C++这事之所以看起来这么复杂.网上所有的文档都没讲清楚,是因为存在5个层面的知识点: 1.在纯C环境下,把C函数注册进Lua环境,理解Lua和C之间可以互相调用的本质2.在cocos2d-x项目里,把纯C函数注册进Lua环境,理解cocos

Lua中的模块与module函数详解

很快就要开始介绍Lua里的“面向对象”了,在此之前,我们先来了解一下Lua的模块. 1.编写一个简单的模块 Lua的模块是什么东西呢?通常我们可以理解为是一个table,这个table里有一些变量.一些函数… 等等,这不就是我们所熟悉的类吗? 没错,和类很像(实际上我说不出它们的区别). 我们来看看一个简单的模块,新建一个文件,命名为game.lua,代码如下: 复制代码代码如下: game = {}function game.play()    print("那么,开始吧");end

【转】Cocos2d-x下Lua调用自定义C++类和函数的最佳实践

转自:http://segmentfault.com/blog/hongliang/1190000000631630 关于cocos2d-x下Lua调用C++的文档看了不少,但没有一篇真正把这事给讲明白了,我自己也是个初学者,摸索了半天,总结如下: cocos2d-x下Lua调用C++这事之所以看起来这么复杂.网上所有的文档都没讲清楚,是因为存在5个层面的知识点: 1.在纯C环境下,把C函数注册进Lua环境,理解Lua和C之间可以互相调用的本质 2.在cocos2d-x项目里,把纯C函数注册进L

lua中的数据结构-table常用函数库

table.concat(table, sep,  start, end) concat是concatenate(连锁, 连接)的缩写. table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(sep)隔开.除了table外, 其他的参数都不是必须的, 分隔符的默认值是空字符, start的默认值是1, end的默认值是数组部分的总长. sep, start, end这三个参数是顺序读入的, 所以虽然它们都不是必须参数,

Lua的模块编写与module函数

本文转载于:http://www.benmutou.com/archives/1786 1.编写一个简单的模块 Lua的模块是什么东西呢?通常我们可以理解为是一个table,这个table里有一些变量.一些函数… 等等,这不就是我们所熟悉的类吗? 没错,和类很像(实际上我说不出它们的区别). 我们来看看一个简单的模块,新建一个文件,命名为game.lua,代码如下: game = {} function game.play() print("那么,开始吧"); end function