
--------------------------------------------------------------------------------
-- Date 模块
--------------------------------------------------------------------------------

---@class date_object*
local date_object = {}

---@class date*
---@field version integer 模块版本号，格式为 major * 10000000 + minor * 10000 + revision
---@overload fun(): date_object*
---@overload fun(value: string|number|boolean|table|date_object*): date_object*
---@overload fun(year: number|string, month: number|string, day: number|string, hour?: number|string, min?: number|string, sec?: number|string, ticks?: number|string): date_object*
---@type date*
local M = {}

--- 构造时间部分
---@param hour? number 时
---@param min? number 分
---@param sec? number 秒
---@param ticks? number tick
---@return date_object* date 日期对象
function M.time(hour, min, sec, ticks) end

--- 构造 ISO 周日期
---@param year number 年
---@param week? number 周
---@param day? number ISO 星期
---@return date_object* date 日期对象
function M.isodate(year, week, day) end

--- 判断闰年
---@param value number|date_object* 年份或日期对象
---@return boolean isLeap 是否闰年
function M.isleapyear(value) end

--- 获取 epoch 日期对象
---@return date_object* date epoch
function M.epoch() end

--- 计算两个日期对象差值
---@param lhs date_object* 日期对象
---@param rhs date_object* 日期对象
---@return date_object* diff 差值
function M.diff(lhs, rhs) end

--- 设置或获取默认格式
---@param format? string 默认格式
---@return string format 默认格式
function M.fmt(format) end

--- 设置世纪翻转阈值
---@param year integer 阈值
function M.setcenturyflip(year) end

--- 获取世纪翻转阈值
---@return integer year 阈值
function M.getcenturyflip() end

--- 设置或获取每秒 ticks 数
---@param ticks? integer ticks 数
---@return integer ticks 每秒 ticks 数
function M.ticks(ticks) end

--- 设置或获取最小 daynum
---@param value? number daynum
---@return number|date_object* value daynum 或日期对象
function M.daynummin(value) end

--- 设置或获取最大 daynum
---@param value? number daynum
---@return number|date_object* value daynum 或日期对象
function M.daynummax(value) end

--- 复制日期对象
---@return date_object* copy 副本
function date_object:copy() end

--- 规范化日期对象
---@return date_object* self 当前对象
function date_object:normalize() end

--- 获取年月日
---@return integer year 年
---@return integer month 月
---@return integer day 日
function date_object:getdate() end

--- 获取时分秒和 ticks
---@return integer hour 时
---@return integer min 分
---@return integer sec 秒
---@return number ticks tick
function date_object:gettime() end

--- 获取年份
---@return integer year 年
function date_object:getyear() end

--- 获取月份
---@return integer month 月
function date_object:getmonth() end

--- 获取日期
---@return integer day 日
function date_object:getday() end

--- 获取小时
---@return integer hour 时
function date_object:gethours() end

--- 获取 12 小时制小时
---@return integer hour 12 小时制小时，范围 1-12
function date_object:getclockhour() end

--- 获取分钟
---@return integer min 分
function date_object:getminutes() end

--- 获取秒
---@return integer sec 秒
function date_object:getseconds() end

--- 获取小数秒
---@return number seconds 小数秒
function date_object:getfracsec() end

--- 获取 ticks
---@param unit? number 单位
---@return number ticks ticks
function date_object:getticks(unit) end

--- 获取星期
---@return integer weekday 星期，Sunday 为 1
function date_object:getweekday() end

--- 获取一年中的天数
---@return integer yearday 天数
function date_object:getyearday() end

--- 获取周数
---@param weekBase? integer 每周起始日
---@return integer week 周数
function date_object:getweeknumber(weekBase) end

--- 获取 ISO 星期
---@return integer weekday ISO 星期，Monday 为 1
function date_object:getisoweekday() end

--- 获取 ISO 周数
---@return integer week ISO 周数
function date_object:getisoweeknumber() end

--- 获取 ISO 年份
---@return integer year ISO 年份
function date_object:getisoyear() end

--- 获取 ISO 日期
---@return integer year ISO 年份
---@return integer week ISO 周数
---@return integer weekday ISO 星期
function date_object:getisodate() end

--- 设置年月日
---@param year? number 年
---@param month? number 月
---@param day? number 日
---@return date_object* self 当前对象
function date_object:setyear(year, month, day) end

--- 设置 ISO 年、周和星期
---@param year? number ISO 年
---@param week? number ISO 周
---@param day? number ISO 星期，Monday 为 1
---@return date_object* self 当前对象
function date_object:setisoyear(year, week, day) end

--- 设置 ISO 星期
---@param day number ISO 星期，Monday 为 1
---@return date_object* self 当前对象
function date_object:setisoweekday(day) end

--- 设置 ISO 周数和可选星期
---@param week number ISO 周
---@param day? number ISO 星期，Monday 为 1
---@return date_object* self 当前对象
function date_object:setisoweeknumber(week, day) end

--- 设置月份
---@param month number 月
---@param day? number 日
---@return date_object* self 当前对象
function date_object:setmonth(month, day) end

--- 设置日期
---@param day number 日
---@return date_object* self 当前对象
function date_object:setday(day) end

--- 设置时分秒和 ticks
---@param hour? number 时
---@param min? number 分
---@param sec? number 秒
---@param ticks? number tick
---@return date_object* self 当前对象
function date_object:sethours(hour, min, sec, ticks) end

--- 设置分钟
---@param min number 分
---@param sec? number 秒
---@param ticks? number tick
---@return date_object* self 当前对象
function date_object:setminutes(min, sec, ticks) end

--- 设置秒
---@param sec number 秒
---@param ticks? number tick
---@return date_object* self 当前对象
function date_object:setseconds(sec, ticks) end

--- 设置 ticks
---@param ticks number tick
---@return date_object* self 当前对象
function date_object:setticks(ticks) end

--- 增加年月日
---@param years? number 年
---@param months? number 月
---@param days? number 日
---@return date_object* self 当前对象
function date_object:addyears(years, months, days) end

--- 增加月份和天数
---@param months? number 月
---@param days? number 日
---@return date_object* self 当前对象
function date_object:addmonths(months, days) end

--- 增加天数
---@param days number 天
---@return date_object* self 当前对象
function date_object:adddays(days) end

--- 增加小时
---@param hours number 小时
---@return date_object* self 当前对象
function date_object:addhours(hours) end

--- 增加分钟
---@param minutes number 分钟
---@return date_object* self 当前对象
function date_object:addminutes(minutes) end

--- 增加秒
---@param seconds number 秒
---@return date_object* self 当前对象
function date_object:addseconds(seconds) end

--- 增加 ticks
---@param ticks number tick
---@return date_object* self 当前对象
function date_object:addticks(ticks) end

--- 跨度 ticks
---@return number ticks ticks
function date_object:spanticks() end

--- 跨度秒
---@return number seconds 秒
function date_object:spanseconds() end

--- 跨度分钟
---@return number minutes 分钟
function date_object:spanminutes() end

--- 跨度小时
---@return number hours 小时
function date_object:spanhours() end

--- 跨度天
---@return number days 天
function date_object:spandays() end

--- 转成本地时间
---@return date_object*? self 当前对象
function date_object:tolocal() end

--- 转成 UTC 时间
---@return date_object*? self 当前对象
function date_object:toutc() end

--- 获取时区偏移分钟数
---@return number bias 偏移分钟数
function date_object:getbias() end

--- 获取时区名称
---@return string name 时区名称
function date_object:gettzname() end

--- 按格式输出文本
---@param format? string 格式
---@return string text 格式化文本
function date_object:fmt(format) end

--- 按基础格式输出文本
---@param format string 格式
---@return string text 格式化文本
function date_object:fmt0(format) end

return M
