Модуль:LongISODateToText

Документация
--[[
 Переводит даты 10000-01-01 -> в 1 января 10000 года
 Используется в шаблонах Ожидаемых событий по датам (ОСДН и ОСДК)
]]

local LongISODateToText={}

local monthNominative = {'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"}
local monthGenitive = {'января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', "сентября", "октября", "ноября", "декабря"}

function LongISODateToText.keyYInvoke(arg)
 return LongISODateToText.keyY(arg.args[1])
end

function LongISODateToText.keyY(dateIn)
 local y,m,d = LongISODateToText.parse(dateIn)
 y = y+100000
 return y
end

function LongISODateToText.keyISOInvoke(arg)
 return LongISODateToText.keyISO(arg.args[1])
end

function LongISODateToText.keyISO(dateIn)
 local y,m,d = LongISODateToText.parse(dateIn)
 y = y+100000
 m = m+10
 d = d+10
 return y..m..d
end

function LongISODateToText.parse(dateIn)
 local y,m,d = dateIn:match('^%s*(%-?%d+)[-\\]0*(1?%d)[-\\]0*(%d+)')
 return tonumber(y), tonumber(m), tonumber(d)
end

function LongISODateToText.plusDMY(arg)
 return LongISODateToText.plusDMY(arg.args[1], arg.args[2])
end

function LongISODateToText.plusDMY(dateIn1, dateIn2)
 local y1,m1,d1 = LongISODateToText.parse(dateIn1)
 local y2,m2,d3 = LongISODateToText.parse(dateIn2)
 local d3 = d1 + d2
 local m3 = m1 + m2
 local y3 = 0
 while (m3 > 12) do
  m3 = m3 - 12
  y3 = y3 + 1
 end
 y3 = y1 + y2 + y3
 return d3.." "..monthGenitive[m3].." "..y3
end

function LongISODateToText.parseDMInvoke(arg)
 return LongISODateToText.parseDM(arg.args[1])
end

function LongISODateToText.parseDM(dateIn)
 local y,m,d = LongISODateToText.parse(dateIn)
 return d.." "..monthGenitive[m]
end

function LongISODateToText.parseDMYInvoke(arg)
 return LongISODateToText.parseDMY(arg.args[1])
end

function LongISODateToText.parseDMY(dateIn)
 local y,m,d = LongISODateToText.parse(dateIn)
 return d.." "..monthGenitive[m].." "..y
end

function LongISODateToText.parseMYInvoke(arg)
 return LongISODateToText.parseMY(arg.args[1])
end

function LongISODateToText.parseMY(dateIn)
 local y,m,d = LongISODateToText.parse(dateIn)
 return monthNominative[m].." "..y
end

function LongISODateToText.parseYInvoke(arg)
 return LongISODateToText.parseY(arg.args[1])
end

function LongISODateToText.parseY(dateIn)
 local y,m,d = LongISODateToText.parse(dateIn)
 return y
end

return LongISODateToText