-- 实现日历的效果层
friend_hldnDateLayer = class("friend_hldnDateLayer", function()
return display.newNode()
end )
function friend_hldnDateLayer:ctor()
local beginYear = 2017
local endYear = tonumber( os.date("%Y", os.time()) ) or 2017
-- 获取需要的年份的数据
-- 获取年 月 日 周
local Ydata = {}
for i = beginYear,endYear do
local vo = {}
vo.y = i
vo.ms = {}
for j=2,13 do
-- 获取该月份的天数 month参数是要填写下月个月份的
local tianshu = os.date("%d", os.time({year=i,month=j,day=0}) )
vo.ms[j-1] = {}
vo.ms[j-1].ds = {}
-- 插入天数数据
for k=1,tianshu do
vo.ms[j-1].ds[k] = {}
-- 日期
vo.ms[j-1].ds[k].d = k
-- 得到该日期是周几
local t = os.time({year=i,month=j-1,day=k})
vo.ms[j-1].ds[k].z = os.date("*t",t).wday -1
end
end
Ydata[i] = vo
end
-- 绘制月份的详细信息
function self:getCurDatedata(year,month)
-- 日历单页显示42个日期数据
-- 初始42个日期数据进行标记 z=周几 d=日期初始为0
local zsData = {}
local _s = {0,1,2,3,4,5,6}
for i=1,42 do
local index = i%7
zsData[i] = {z = _s[index == 0 and 7 or index],d = 0}
end
--[[
记录第一次插入数据的位置-1 ,记录最后插入位置+1
可以通过该参数,进行填补日期
]]
local jlFristIndex,jlFinalIndex = -1,-1
-- 把该年月的日期相应的插入到对应的位置中
for i,ds in pairs( Ydata[year].ms[month] ) do
-- 该参数为了避免 zsData的日期数据重复的插入
-- 从2开始为了保证可以存在上个月分的日期显示
local statIndex = 2
-- 根据周的数据依次记录日期数据
for j,d in pairs(ds) do
for k=statIndex,#zsData do
local t2 = k%7
if tonumber(zsData[k].z) == tonumber(d.z) then
if jlFristIndex == -1 then
jlFristIndex = k - 1
end
-- 修改日期
zsData[k].d = d.d
statIndex = statIndex + 1
jlFinalIndex = k + 1
break
end
end
end
end
dump(zsData,"date1 = ")
-- jlFristIndex,jlFinalIndex 填补缺省日期 对一月份特殊处理
if month == 1 then
if jlFinalIndex ~= -1 then
local d = 1
for j=jlFinalIndex,#zsData do
zsData[j].d = d
zsData[j].isQs = true
d = d + 1
end
end
if jlFristIndex ~= -1 then
local index = 31
for i=jlFristIndex,1,-1 do
zsData[i].d = index
zsData[i].isQs = true
index = index - 1
end
end
else
if jlFinalIndex ~= -1 then
local d = 1
for j=jlFinalIndex,#zsData do
zsData[j].d = d
zsData[j].isQs = true
d = d + 1
end
end
if jlFristIndex ~= -1 then
local ds = Ydata[year].ms[month-1].ds
local index = #ds
for i=jlFristIndex,1,-1 do
zsData[i].d = ds[index].d
zsData[i].isQs = true
index = index - 1
end
end
end
-- zsData 就是 按照 0日、1、2、3、4、5、6对应排列的日期数据 可以进行绘制了
dump(zsData,"date2 = ")
return zsData
end
local zsData = self:getCurDatedata(2017,12)
for i,data in pairs(zsData) do
local text = ccui.Text:create(data.d, Tm.Res.FontDefault, 40)
self:addChild(text)
local _ = data.isQs and text:setColor(cc.c3b(255,255,0))
local index = i%7
index = index == 0 and 7 or index
local indey = math.modf(i/7)
indey = index == 7 and indey - 1 or indey
text:setPosition(100 + (index-1) * 60,650 - indey * 60 )
end
end
return friend_hldnDateLayer