모듈:Date2

--  

This module is intended for processing of date strings.
Please do not modify this code without applying the changes first at Module:Date/sandbox and testing 
at Module:Date/sandbox/testcases and Module talk:Date/sandbox/testcases.
Authors and maintainers:- User:Parent5446 - original version of the function mimicking template:ISOdate- User:Jarekt - original version of the functions mimicking template:Date and template:ISOyear

local p = {}
-- ===================================**
-- === Dependencies ==================**
-- ===================================**
--local i18n     = require('Module:I18n/date')		-- get localized translations of date formats
--local Fallback = require('Module:Fallback')			-- get fallback functions
local yesno    = require('Module:Yesno')
local i18n = {
	DateLang = {
		'ko' = 'ko-form'
	},
	DateFormat = {
		'ko-form' = {
		YMD   ='Y년 F j일',		
		YM    ='Y년 F',		
		Y     ='Y',
		}
	}
}
--lang=en}}

Parameters:
year,month,day,hour,minute,second: broken down date-time component strings
lang: The language to display it in
case: Language format (genitive, etc.) for some languages
class: CSS class for the  node, use "" for no metadata at all
Error Handling:
function p.Date(frame)
	return p._Date(	
		{ 
			frame.args"year" or , 
			frame.args"month" or ,
			frame.args"day" or , 
		},
		frame.args"lang" or 'ko',          -- language
		frame.args"trim_year" or '100-999' -- by default pad one and 2 digit years to be 4 digit long, while keeping 3 digit years as is
	)	
end
function p._Date(datevec, lang, trim_year)	
	-- make sure inputs are in the right format
	if #datevec check if it is a month name in English
				v = mw.language.new('en'):formatDate( "n", v)
				datenumi = tonumber(v)
			end
			if datenumi==nil or datenumi>maxvali then
				-- Some numbers are out of range -> abort and return the empty string
				return 
			end
		end
	end
	
	-- create time stamp string (for example 2000-02-20 02:20:20) based on which variables were provided
	local timeStamp
	if datecode:sub(1,3)=='YMD' then
		timeStamp = string.format('%04i-%02i-%02i', datenum1, datenum2, datenum3 )
		datecode = 'YMD' -- 'YMD', 'YMDHMS' and 'YMDHM' are the only supported format starting with 'YMD'. All others will be converted to 'YMD'
	elseif datecode == 'YM' then
		timeStamp = string.format('%04i-%02i', datenum1, datenum2 )
	elseif datecode:sub(1,1)=='Y' then
		timeStamp = string.format('%04i', datenum1 )
		datecode = 'Y' 
	else
		return   -- format not supported
	end
	-- ======================================================**
	-- === Create Date String using in chosen language
	-- ======================================================**
	
	-- which form should the date take? 
	-- Use Fallback module to handle rare languages which are more likely to use different for than default EN form
	local langDateForm = 'ko-form'
	
	-- Look up country specific format input to  function
	local dFormat = i18n.DateFormatlangDateFormdatecode
	
	-- Lua only date formating using  parser function (new)
		-- prefered call which gives "Lua error: too many language codes requested." on the Module talk:Date/sandbox/testcases page
		--local datestr = mw.language.new(lang):formatDate( dFormat, timeStamp) 
	local datestr = mw.getCurrentFrame():callParserFunction( "#time", { dFormat, timeStamp, lang } )
	
	-- If year=tonumber(YMin) and datenum1<=tonumber(YMax)) 
		end
	
		-- If the date form isn't the Thai solar calendar, don't zero pad years in the range of 100-999.  
		-- If at some point support for Islamic/Hebrew/Japanese years is added, they may need to be skipped as well. 
		if trim then
			--local yearStr1 = mw.language.new(lang):formatDate( 'Y', timeStamp)
			local yearStr1 = mw.getCurrentFrame():callParserFunction( "#time", { 'Y', timeStamp, lang } )
			--local yearStr1 = datestr:match( '%d%d%d%d' ) -- 4 digits in a row (in any language) - that must be a year
			local yearStr2 = yearStr1
			local zeroStr = mw.ustring.sub(yearStr1,1,1)
			for i=1,3 do -- trim leading zeros
				if mw.ustring.sub(yearStr2,1,1)==zeroStr then
					yearStr2 = mw.ustring.sub(yearStr2, 2, 5-i)
				else
					break
				end
			end
			datestr = datestr:gsub( yearStr1, yearStr2 )
			--datestr = string.format('%s (%s, %s)', datestr, yearStr1, yearStr2 )
		end
	end
	
	return datestr
end
return p