Module:Citation/CS1/Date validation: Difference between revisions

    m>Trappist the monk
    (Synch from sandbox;)
    m>Trappist the monk
    (Synch from sandbox;)
    Line 9: Line 9:




    --[[--------------------------< I S _ V A L I D _ A C C E S S D A T E >----------------------------------------
    --[=[-------------------------< I S _ V A L I D _ A C C E S S D A T E >----------------------------------------


    returns true if:
    returns true if:
    Line 21: Line 21:
    adding 24 hours gives 2015-01-03T00:00:00 – one second more than tomorrow
    adding 24 hours gives 2015-01-03T00:00:00 – one second more than tomorrow


    ]]
    This function does not work for languages other than English.  Wikimedia #time: parser apparently doesn't understand
    non-Engish date month names. This function will always return false when the date contains a non-English month name
    because good1 is false after the call to lang.formatDate.
     
    For the time being, to use this function, supply it with YYYY-MM-DD format dates.  See
    [[bs:Modul:Citation/CS1/Date validation/igralište]] for one possible solution.
     
    ]=]


    local function is_valid_accessdate (accessdate)
    local function is_valid_accessdate (accessdate)
    Line 54: Line 61:
    local long_months = {['January']=1, ['February']=2, ['March']=3, ['April']=4, ['May']=5, ['June']=6, ['July']=7, ['August']=8, ['September']=9, ['October']=10, ['November']=11, ['December']=12};
    local long_months = {['January']=1, ['February']=2, ['March']=3, ['April']=4, ['May']=5, ['June']=6, ['July']=7, ['August']=8, ['September']=9, ['October']=10, ['November']=11, ['December']=12};
    local short_months = {['Jan']=1, ['Feb']=2, ['Mar']=3, ['Apr']=4, ['May']=5, ['Jun']=6, ['Jul']=7, ['Aug']=8, ['Sep']=9, ['Oct']=10, ['Nov']=11, ['Dec']=12};
    local short_months = {['Jan']=1, ['Feb']=2, ['Mar']=3, ['Apr']=4, ['May']=5, ['Jun']=6, ['Jul']=7, ['Aug']=8, ['Sep']=9, ['Oct']=10, ['Nov']=11, ['Dec']=12};
    local temp;
    return long_months[month] or -- if month is the long-form name
    temp=long_months[month];
    short_months[month] or -- if month is the short-form name
    if temp then return temp; end -- if month is the long-form name
    0; -- misspelled, improper case, or not a month name
    temp=short_months[month];
    if temp then return temp; end -- if month is the short-form name
    return 0; -- misspelled, improper case, or not a month name
    end
    end


    Line 195: Line 199:
    local function is_valid_month_season_range(range_start, range_end)
    local function is_valid_month_season_range(range_start, range_end)
    local range_start_number = get_month_number (range_start);
    local range_start_number = get_month_number (range_start);
    local range_end_number;
    if 0 == range_start_number then -- is this a month range?
    if 0 == range_start_number then -- is this a month range?
    local range_start_number = get_season_number (range_start); -- not a month; is it a season? get start season number
    local range_start_number = get_season_number (range_start); -- not a month; is it a season? get start season number
    local range_end_number = get_season_number (range_end); -- get end season number
    range_end_number = get_season_number (range_end); -- get end season number


    if 0 ~= range_start_number then -- is start of range a season?
    if 0 ~= range_start_number then -- is start of range a season?
    Line 211: Line 216:
    end
    end


    local range_end_number = get_month_number (range_end); -- get end month number
    range_end_number = get_month_number (range_end); -- get end month number
    if range_start_number < range_end_number then -- range_start is a month; does range_start precede range_end?
    if range_start_number < range_end_number then -- range_start is a month; does range_start precede range_end?
    if is_valid_month_range_style (range_start, range_end) then -- do months have the same style?
    if is_valid_month_range_style (range_start, range_end) then -- do months have the same style?