Распад месяцев между двумя датами - PullRequest
0 голосов
/ 02 февраля 2019

Мне нужен цикл, где 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 с использованием языка программирования LUA.

1 Ответ

0 голосов
/ 02 февраля 2019
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: удалите повторяющиеся элементы ).И, наконец, мы перебираем массив всех дат и находим минимальное и максимальное значения для каждого месяца.

Выходные данные

01.01.2019 31.01.2019
01.02.2019 28.02.2019
01.03.2019 31.03.2019

Если вы хотите, чтобы это было годами, просто сделайте 2 дополнительных цикла,Как только вам нужно найти уникальные годы, а затем вам нужно сравнить не только месяцы, но и годы в последней части.

Редактировать: изменен формат выходного формата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...