Μετάβαση στο περιεχόμενο

Module:DateFunctions

Ασό Βικιπαίδεια

Documentation for this module may be created at Module:DateFunctions/τεκμηρίωση

-- Διάφορες ημερολογιακές συναρτήσεις
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