Module:DateFunctions
Module:DateFunctions >> Module:DateFunctions/τεκμηρίωση
Το Module χρησιμοποιείται από Πρότυπα σχετικά με τη «Λέξη της Ημέρας»
Δείτε και το Module:WordOfDay
-- Διάφορες ημερολογιακές συναρτήσεις για το Βικιλεξικό
p = {}
-- RiciLake comments:
-- It would be better to create the days_in_month table outside the
-- function, like this (using % so it only works in Lua 5.1)
do
local days_in_month = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
local function is_leap_year(year)
return year % 4 == 0 and (year % 100 ~= 0 or year % 400 == 0)
end
function get_days_in_month(month, year)
if month == 2 and is_leap_year(year) then
return 29
else
return days_in_month[month]
end
end
end
mhnas = { {['name'] = 'Ιανουάριος', ['gen'] = 'Ιανουαρίου', ['d'] = 31},
{['name'] = 'Φεβρουάριος', ['gen'] = 'Φεβρουαρίου', ['d'] = 29},
{['name'] = 'Μάρτιος', ['gen'] = 'Μαρτίου', ['d'] = 31},
{['name'] = 'Απρίλιος', ['gen'] = 'Απριλίου', ['d'] = 30},
{['name'] = 'Μάιος', ['gen'] = 'Μαΐου', ['d'] = 31},
{['name'] = 'Ιούνιος', ['gen'] = 'Ιουνίου', ['d'] = 30},
{['name'] = 'Ιούλιος', ['gen'] = 'Ιουλίου', ['d'] = 31},
{['name'] = 'Αύγουστος', ['gen'] = 'Αυγούστου', ['d'] = 31},
{['name'] = 'Σεπτέμβριος', ['gen'] = 'Σεπτεμβρίου', ['d'] = 30},
{['name'] = 'Οκτώβριος', ['gen'] = 'Οκτωβρίου', ['d'] = 31},
{['name'] = 'Νοέμβριος', ['gen'] = 'Νοεμβρίου', ['d'] = 30},
{['name'] = 'Δεκέμβριος', ['gen'] = 'Δεκεμβρίου', ['d'] = 31},
}
hmera = { 'Δευτέρα', 'Τρίτη', 'Τετάρτη', 'Πέμπτη', 'Παρασκευή', 'Σάββατο', 'Κυριακή'}
-- returns the day of week integer and the name of the week
-- Compatible with Lua 5.0 and 5.1.
-- from sam_lie
function get_day_of_week(dd, mm, yy)
-- local days = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }
-- local days = { 7, 1, 2, 3, 4, 5, 6 }
local mmx = mm
if (mm == 1) then mmx = 13; yy = yy-1 end
if (mm == 2) then mmx = 14; yy = yy-1 end
local val8 = dd + (mmx*2) + math.floor(((mmx+1)*3)/5) + yy + math.floor(yy/4) - math.floor(yy/100) + math.floor(yy/400) + 2
local val9 = math.floor(val8/7)
local dw = val8-(val9*7)
if (dw < 2 ) then
dw = dw + 6
else
dw =dw - 1
end
-- return dw, days[dw]
-- return days[dw]
return dw
end
-- αν δεν δοθεί η παράμετρος ε
-- χρησιμοποιεί το τρέχον έτος
-- αν δεν δοθεί η παράμετρος μ
-- χρησιμοποιεί τον τρέχοντα μήνα
-- επιστρέφει τον αριθμό της πρώτης ημέρας του μήνα (1-7)
-- με πρώτη (και αριθμό 1) τη Δευτέρα
function p.getfirstDayNum(frame)
local args = frame.args
local year = 0
local month = 0
local osdate = os.date('*t')
if args['ε'] == nil then
year = osdate.year
else
year = args['ε']
end
if args['μ'] == nil then
month = osdate.month
else
local month = args['μ']
end
return get_day_of_week(1, month, year)
end
-- αν δεν δοθεί η παράμετρος ε
-- χρησιμοποιεί το τρέχον έτος
-- αν δεν δοθεί η παράμετρος μ
-- χρησιμοποιεί τον τρέχοντα μήνα
-- επιστρέφει τον αριθμό των ημερών του μήνα
function p.getMonthDays(frame)
local args = frame.args
local year = 0
local month = 0
local osdate = os.date('*t')
if args['ε'] == nil then
year = osdate.year
else
year = args['ε']
end
if args['μ'] == nil then
month = osdate.month
else
local month = args['μ']
end
return get_days_in_month(month, year)
end
-- for debuging with debug console
function p.getdaynumtest()
--args1 = 2013
--args2 = 1
local b = os.date('*t')--,os.time{year=yr,month=mnth+1,day=0})
--return b.year, b.month
--return 'πρώτη ημέρα του μήνα:' .. mhnas[args2].gen .. ' του έτους:' .. args1 .. ' είναι η ' .. hmera[get_day_of_week(1, args2, args1) ]
return 'πρώτη ημέρα του μήνα:' .. mhnas[b.month].gen .. ' του έτους:' .. b.year .. ' είναι η ' .. hmera[get_day_of_week(1, b.month, b.year) ]
end
--επιστρέφει τη σημερινή ημερομηνία με τη μορφή: Δευτέρα, 1 Ιανουαρίου 2000
--δοκιμή στην κονσόλα με:
--=p['σήμερα']()
p['σήμερα'] = function ()
local osdate = os.date('*t')
return (hmera[osdate.wday-1] or hmera[7]) .. ', ' .. osdate.day .. ' ' .. mhnas[osdate.month]['gen'] .. ' ' .. osdate.year
end
return p