יחידה:תאריך: הבדלים בין גרסאות בדף

מאין תקציר עריכה
מ המרות
שורה 1: שורה 1:
local Date = {}
local Date = {}
local maxDaysInMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}


--Internal functions
--Internal functions
שורה 199: שורה 200:
     return ((year % 4) == 0) and
     return ((year % 4) == 0) and
             (not (((year % 100) == 0) and ((year % 400) ~= 0)))
             (not (((year % 100) == 0) and ((year % 400) ~= 0)))
end
local isDateInLeapYear = function(indate)
if indate.calendar == Date.CALENDAR.JULIAN then
return 0 == indate.year % 4
end
return leapGregorian(indate.year)
end
end


שורה 245: שורה 253:
      
      
     return year, month, day
     return year, month, day
end
-- adapted from ro:Modul:GregorianDate
local initialOffset = -3
local limitDates = {
{year = 4, month = 3, day = 3, calendar = 'julian' },
{year = 100, month = 3, day = 2, calendar = 'julian' },
{year = 200, month = 3, day = 1, calendar = 'julian' },
{year = 300, month = 2, day = 29, calendar = 'julian' },
{year = 500, month = 2, day = 28, calendar = 'julian' },
{year = 600, month = 2, day = 27, calendar = 'julian' },
{year = 700, month = 2, day = 26, calendar = 'julian' },
{year = 900, month = 2, day = 25, calendar = 'julian' },
{year = 1000, month = 2, day = 24, calendar = 'julian' },
{year = 1100, month = 2, day = 23, calendar = 'julian' },
{year = 1300, month = 2, day = 22, calendar = 'julian' },
{year = 1400, month = 2, day = 21, calendar = 'julian' },
{year = 1500, month = 2, day = 20, calendar = 'julian' },
{year = 1700, month = 2, day = 19, calendar = 'julian' },
{year = 1800, month = 2, day = 18, calendar = 'julian' },
{year = 1900, month = 2, day = 17, calendar = 'julian' },
{year = 2100, month = 2, day = 16, calendar = 'julian' },
{year = 2200, month = 2, day = 15, calendar = 'julian' },
{year = 2300, month = 2, day = 14, calendar = 'julian' }
}
function Date.julianToGregorian(indate)
if indate.calendar ~= Date.CALENDAR.JULIAN then
return indate
end
local offset = initialOffset
local limitDateIdx = 1
while limitDateIdx < #limitDates and le(limitDates[limitDateIdx], indate) do
limitDateIdx = limitDateIdx + 1
offset = offset + 1
end
local outputDate = Date.addDaysToDate(indate, offset)
outputDate.calendar = Date.CALENDAR.GREGORIAN
outputDate.calendarmodel = 'http://www.wikidata.org/entity/Q1985727'
return Date.new(outputDate)
end
function Date.addDaysToDate(indate, days)
local outdate = mw.clone(indate)
outdate.day = outdate.day + days
local lastDayOfMonth = maxDaysInMonth[outdate.month]
while outdate.day > lastDayOfMonth do
lastDayOfMonth = maxDaysInMonth[outdate.month]
if outdate.month == 2 and isDateInLeapYear(outdate) then lastDayOfMonth = 29 end
outdate.month = outdate.month + 1
outdate.day = outdate.day - lastDayOfMonth
end
while outdate.month > 12 do
outdate.year = outdate.year + 1
outdate.month = outdate.month - 12
end
return outdate
end
end