Module:DateFunctions
Τεκμηρίωση module[δημιουργία]
Μπορείτε να συμβάλλετε στη δημιουργία σελίδας τεκμηρίωσης για αυτό το Scribunto module. Οι συντάκτες μπορούν να πειραματίζονται στο πρόχειρο (δημιουργία | αντίγραφο) και στις δοκιμαστικές σελίδες (δημιουργία) του module. Παρακαλούμε να προσθέτετε τις κατηγορίες στην υποσελίδα τεκμηρίωσης. Υποσελίδες αυτού του module. |
-- Διάφορες ημερολογιακές συναρτήσεις
p = {}
--επιστρέφει το κείμενο σε div με σφάλμα
--και εντάσσει τη σελίδα σε κατηγορία με σφάλματα
errorhere = function(errstring)
return '<div class="error">' .. errstring .. '</div>[[Κατηγορία:Σελίδες με σφάλματα στο ημερολόγιο]]'
end
--επιστρέφει true αν είναι αλφαριθμητικό και έχει έστω και έναν χαρακτήρα
exeikati = function(onearg)
if onearg == nil then
return false
end
if type(onearg) == 'string' then
return (mw.ustring.len(onearg) > 0)
else
return false
end
end
-- 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)
--επιστρέφει το αν είναι δίσεκτο έτος
p.isleapyear = function(poioetos)
return poioetos % 4 == 0 and (poioetos % 100 ~= 0 or poioetos % 400 == 0)
end
--επιστρέφει τις ημέρες που έχει ο μήνας
----(μήνας και έτος ακέραιοι αριθμοί)
p.getdaysinmonth = function(poiosmhnas, poioetos)
if poiosmhnas == 2 and p.isleapyear(poioetos) then
return 29
else
return p['μήνες'][poiosmhnas]['ημ']
end
end
--επιστρέφει το μήνα (ο μήνας σε ακέραιο) στην ονομαστική πτώση
p.getmonthname = function(poiosmhnas)
return p['μήνες'][poiosmhnas]['όνομα']
end
--επιστρέφει το μήνα (ο μήνας σε ακέραιο) στη γενική πτώση
p.getmonthgen = function(poiosmhnas)
return p['μήνες'][poiosmhnas]['γεν']
end
--πίνακας με τα στοιχεία των μηνών
p['μήνες'] = { {['όνομα'] = 'Ιανουάριος', ['γεν'] = 'Ιανουαρίου', ['συντμ'] = {'ΙΑΝ','ΙΑΝ.',}, ['ημ'] = 31},
{['όνομα'] = 'Φεβρουάριος', ['γεν'] = 'Φεβρουαρίου',['συντμ'] = {'ΦΕΒ','ΦΕΒ.',}, ['ημ'] = 29},
{['όνομα'] = 'Μάρτιος', ['γεν'] = 'Μαρτίου',['συντμ'] = {'ΜΑΡ','ΜΑΡ.',}, ['ημ'] = 31},
{['όνομα'] = 'Απρίλιος', ['γεν'] = 'Απριλίου',['συντμ'] = {'ΑΠΡ','ΑΠΡ.',}, ['ημ'] = 30},
{['όνομα'] = 'Μάιος', ['γεν'] = 'Μαΐου',['συντμ'] = {'ΜΑΙ','ΜΑΙ.','ΜΑΪ','ΜΑΪ.',}, ['ημ'] = 31},
{['όνομα'] = 'Ιούνιος', ['γεν'] = 'Ιουνίου',['συντμ'] = {'ΙΟΝ','ΙΟΝ.','ΙΟΥΝ','ΙΟΥΝ.',}, ['ημ'] = 30},
{['όνομα'] = 'Ιούλιος', ['γεν'] = 'Ιουλίου',['συντμ'] = {'ΙΟΛ','ΙΟΛ.','ΙΟΥΛ','ΙΟΥΛ.',}, ['ημ'] = 31},
{['όνομα'] = 'Αύγουστος', ['γεν'] = 'Αυγούστου',['συντμ'] = {'ΑΥΓ','ΑΥΓ.',}, ['ημ'] = 31},
{['όνομα'] = 'Σεπτέμβριος', ['γεν'] = 'Σεπτεμβρίου',['συντμ'] = {'ΣΕΠ','ΣΕΠ.',}, ['ημ'] = 30},
{['όνομα'] = 'Οκτώβριος', ['γεν'] = 'Οκτωβρίου',['συντμ'] = {'ΟΚΤ','ΟΚΤ.',}, ['ημ'] = 31},
{['όνομα'] = 'Νοέμβριος', ['γεν'] = 'Νοεμβρίου',['συντμ'] = {'ΝΟΕ','ΝΟΕ.',}, ['ημ'] = 30},
{['όνομα'] = 'Δεκέμβριος', ['γεν'] = 'Δεκεμβρίου',['συντμ'] = {'ΔΕΚ','ΔΕΚ.',}, ['ημ'] = 31},
}
--επιστρέφει τον αριθμό του μήνα από το όνομα ή τη σύντμηση
--από τον πίνακα
p['μήναςαποόνομα'] = function(month)
if type(month) ~= "string" then
return nil
end
local m = mw.ustring.upper( mw.text.trim(month) )
for i = 1, 12 do
if p['μήνες'][i]['όνομα'] == month then return i end
if p['μήνες'][i]['γεν'] == month then return i end
local j = 1
--για όσο υπάρχει σύντμηση για τον μήνα
while p['μήνες'][i]['συντμ'][j] ~= nil do
if p['μήνες'][i]['συντμ'][j] == m then
return i
end
j = j + 1
end
end
-- αφού δεν βρέθηκε ως εδώ επιστρέφει αυτόματα το nil
end
--πίνακας με τα ονόματα των ημερών
p['ημέρες'] = { 'Δευτέρα', 'Τρίτη', 'Τετάρτη', 'Πέμπτη', 'Παρασκευή', 'Σάββατο', 'Κυριακή'}
--επιστρέφει το ποια μέρα της εβδομάδας είναι (ακέραιος, Δευτέρα=1) αν δοθεί η ημερομηνία
-- returns the day of week (integer)
-- Compatible with Lua 5.0 and 5.1.
-- from sam_lie
p.get_day_of_week = function(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 μέχρι το 12
--για την περίπτωση που έχουμε ξεπεράσει (κυκλικά)
--το πάνω ή το κάτω όριο
--(μία φορά μόνο, δηλαδή από 13-23 ή από -11 μέχρι 0)
p.realmonthnum = function(monthnum)
if monthnum > 12 then return monthnum - 12 end
if monthnum < 1 then return monthnum + 12 end
return monthnum
end
return p