Изменения

обновление
Строка 1: Строка 1:  
local p = {}
 
local p = {}
-- Необходимые модули
+
-- Необходимые модули и переменные
 
local getArgs = require('Module:Arguments').getArgs
 
local getArgs = require('Module:Arguments').getArgs
 
local yesno = require('Module:Yesno')
 
local yesno = require('Module:Yesno')
Строка 7: Строка 7:  
local bool_to_number={ [true]=1, [false]=0 }
 
local bool_to_number={ [true]=1, [false]=0 }
 
local monthlang = {"января","февраля","марта","апреля","мая","июня","июля","августа","сентября","октября","ноября","декабря"}
 
local monthlang = {"января","февраля","марта","апреля","мая","июня","июля","августа","сентября","октября","ноября","декабря"}
 +
local monthd = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
 
local params = { {"г", "g"}, {"ю", "j"},  {"нэ", "НЭ", "ac", "AC"}, {"днэ", "ДНЭ", "bc", "BC"}}
 
local params = { {"г", "g"}, {"ю", "j"},  {"нэ", "НЭ", "ac", "AC"}, {"днэ", "ДНЭ", "bc", "BC"}}
 
local comment = { '<span style="border-bottom: 1px dotted; cursor: help" title="по юлианскому календарю">','</span>'}
 
local comment = { '<span style="border-bottom: 1px dotted; cursor: help" title="по юлианскому календарю">','</span>'}
Строка 108: Строка 109:  
-- 20) Блок общих проверочных функций, связанных с датами
 
-- 20) Блок общих проверочных функций, связанных с датами
   −
local function isdate ( chain )
+
local function leap_year(y)
 +
if (not y) or (type(y) ~= "number")
 +
then return false
 +
elseif (y % 4) ~= 0
 +
then return false
 +
elseif (y % 100 == 0 and y % 400 ~= 0)
 +
then return false
 +
else return true
 +
end
 +
end
 +
 
 +
function isdate ( chain ) -- можно использовать для проверки таблиц с полями day, month, year
 
if not chain then return false
 
if not chain then return false
 
elseif (not type(chain) == "table")
 
elseif (not type(chain) == "table")
Строка 114: Строка 126:  
or (not inbord(chain.month,1,12))
 
or (not inbord(chain.month,1,12))
 
or (not inbord(chain.day,1,31))
 
or (not inbord(chain.day,1,31))
 +
or chain.day > monthd[chain.month]
 
-- or chain.year == 0
 
-- or chain.year == 0
 
then return false
 
then return false
 +
elseif chain.month == 2 and chain.day == 29 and not leap_year(chain.year)
 +
then return false
 
else return true end
 
else return true end
--  more detailed check for 31.02 needed
+
--  check for other calendars needed?
--  check for other calendars needed
   
end
 
end
  
Анонимный участник