我需要一个回路,其中x
和y
两个输入变量,
现在我希望得到一个结果数组中,这两个日期之间的所有周期都在分手几个月。
例如,x = 1.1.2019
和y = 31.3.2019
,
结果将是阵列状1.1.2019, 31.1.2019, 1.2.2019, 28.2.2019, 1.3.2019, 31.3.2019
using LUA编程语言。
x = os.time{year=2019, month=1, day=1}
y = os.time{year=2019, month=3, day=31}
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
--loop to get unique 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
--now everything is set up and we can iterate over the months to get the start and end days of the month
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
一个简短的解释超出了评论。首先,我们得到每个日期的表之间(含)开始和结束日期。在接下来的循环中,我们正在寻找的独特个月(见Lua : remove duplicate elements)阵列。最后我们遍历所有日期的阵列上,找到每月最小值和最大值。
产量
01.01.2019 31.01.2019
01.02.2019 28.02.2019
01.03.2019 31.03.2019
如果你想有好几年来,只要做2个额外的循环。一旦你需要找到独特年,那么你不仅需要几个月也为年的最后部分进行比较。
编辑:输出格式的改变格式。