Editing
Module:YMD to ISO
Jump to navigation
Jump to search
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
local p = {} local function month_number(month_name) local months_full = {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 months_abbr = {jan=1, feb=2, mar=3, apr=4, may=5, jun=6, jul=7, aug=8, sep=9, sept=9, oct=10, nov=11, dec=12} local month_lc, _ = string.gsub(string.lower(month_name),'%.','',1) local month_num = months_full[month_lc] or months_abbr[month_lc] or 0 return month_num end local function days_in_month(month_num,year) -- modified from code in Module:Citation/CS1/Date_validation local days = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} local month_length if month_num == 2 then -- February: 28 days, unless leap year month_length = 28 if year <= 1582 then -- Julian calendar before Oct 1582 if (year%4) == 0 then month_length = 29 -- if leap year, then 29 days end else -- Gregorian calendar since Oct 1582 if ( (year%4)==0 and ((year%100)~=0 or (year%400)==0) ) then month_length = 29 -- if leap year, then 29 days end end else -- not February, get number of days for month month_length = days[month_num] end return month_length end local function zero_pad(string) if string.len(string) == 1 then return '0' .. string else return string end end function p.main(frame) if frame.args[1] == nil then return '' -- first argument is missing end local arg1, _ = string.gsub(mw.text.trim(frame.args[1]),'_',' ') return p._main(arg1) end function p._main(arg1) if arg1 == '' then return '' -- first argument is empty end if not arg1:match('^%d%d%d%d %a%a%a%a?%.?%a?%a?%a?%a?%a?%a? *%d%d?$') then return arg1 -- invalid date pattern end local year, month_name, day = string.match(arg1, '^(%d%d%d%d) *(%a%a%a%a?%.?%a?%a?%a?%a?%a?%a?) *(%d%d?)$') if month_number(month_name) == 0 then return arg1 -- invalid month name or abbreviation end if tonumber(day) < 1 or tonumber(day) > days_in_month(month_number(month_name),tonumber(year)) then return arg1 -- invalid day number for given month end return year .. '-' .. zero_pad(tostring(month_number(month_name))) .. '-' .. zero_pad(day) end return p
Summary:
By saving changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Template used on this page:
Module:YMD to ISO/doc
(
edit
)
Navigation menu
Personal tools
Not logged in
Talk
Contributions
Create account
Log in
Namespaces
Module
Discussion
English
Views
Read
Edit source
View history
More
Search
Navigation
Main page
Community portal
Current events
Recent changes
Random page
Help
Donate
Tools
What links here
Related changes
Upload file
Special pages
Page information