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