两个日期之间的月份分解

我需要一个循环,其中 xy 是两个输入变量,

现在我想要得到一个结果数组,其中这两个日期之间的所有时期都被分解为月份。

例如,x = 1.1.2019y = 31.3.2019

结果将会是一个类似于 1.1.2019, 31.1.2019, 1.2.2019, 28.2.2019, 1.3.2019, 31.3.2019 的数组,使用 LUA 编程语言。

点赞
用户9534390
用户9534390
--设置起始日期和结束日期
x = os.time{year=2019, month=1, day=1}
y = os.time{year=2019, month=3, day=31}

--创建日期表df,获取每个日期
df = {}
i = 2
sec_day = 24*60*60
df[1] = x
while x <= y do
     x = x +sec_day
     df[i] = x
     i = i+1
end

--获取唯一月份的数组d_months
hash={}
d_months = {}
for _,v in ipairs(df) do
    if (not hash[os.date('%m',v)]) then
        d_months[#d_months+1] = os.date('%m', v)
        hash[os.date('%m',v)] = true
    end
end

--获取每个月的开始和结束日期
min_d = {}
max_d = {}
for idx,month in ipairs(d_months) do
    min = nil
    max = nil
    for _,v in ipairs(df) do
         if os.date('%m', v) == month then
             min = min or v
             max = max or v
             min = min < v and min or v
             max = max > v and max or v
         end
     end
 min_d[idx] = os.date('%d.%m.%Y', min)
 max_d[idx] = os.date('%d.%m.%Y', max)
 print(os.date('%d.%m.%Y', min) .. " " .. os.date('%d.%m.%Y', max))
 end

代码功能解释:首先使用起始日期和结束日期创建日期表,获取两个时间段内的所有日期。接下来遍历日期表找到唯一月份的数组。最后,迭代每个月的所有日期,找到该月的最小和最大日期。

输出结果为:

01.01.2019 31.01.2019
01.02.2019 28.02.2019
01.03.2019 31.03.2019

如果需要获取年份,可以再添加两个循环,在第一个循环里创建唯一年份数组,在第二个循环里比较年份和月份。

2019-02-02 02:21:10