--[[ __ __ _ _ ____ _ ___ _ ___ \/ ___ __ _ _ ___ _ _ \ __ _ _ ___ _ _/ ( _ ) _ __ \/ / _ \ / _` / _ (_) / _` __/ _ \ / _ \ '_ \ (_) (_ _ __/_ _ (_ __/ (_) _ _ \___/ \__,_ \__,_ _ \___(_)____/ \__,_ \__\___ ___ _ \___/ _ _ 이 모듈은 날짜 문자열 처리를 목적으로 합니다. 모듈에서 변경 사항을 먼저 적용하지 않고 이 코드를 수정하지 마십시오.날짜/샌드박스 및 테스트 모듈:날짜/샌드박스/테스트 케이스 및 모듈 토크:날짜/샌드박스/테스트 케이스. 작성자 및 유지관리자: * 사용자:Parent5446 - 함수 모방 템플릿의 원래 버전:ISO 날짜 * 사용자: Jarekt - 템플릿을 모방한 함수의 원래 버전:날짜. ]] 요구하다('모듈:글로벌 없음) -- ================================================== -- === 내부 기능 =========================== -- ================================================== -- 부울과 같은 Wikitext 입력을 일관되게 처리할 수 있는 함수입니다. --모듈과 같이 동작합니다.예스노 현지의 기능. 네, 아니요(값, 체납) 한다면 유형(값) == '실패' 그리고나서 돌아가다 값 그렇지 않으면 유형(값) == '숫자' 그리고나서 한다면 값==1 그리고나서 돌아가다 진실의 그렇지 않으면 값==0 그리고나서 돌아가다 거짓의 끝. 그렇지 않으면 유형(값) == '문자열 그리고나서 값 = 음.스트링.더 낮게(값) -- 소문자로 표시 한다면 값 == '아니요' 또는 값 == 'n' 또는 값 == 'false' 또는 톤수(값) == 0 그리고나서 돌아가다 거짓의 그렇지 않으면 값 == '네' 또는 값 == 'y' 또는 값 == '진짜' 또는 톤수(값) == 1 그리고나서 돌아가다 진실의 끝. 끝. 돌아가다 체납 끝. --------------------------------------------------------------------------------------- -- "..." 문자열의 일부를 무시하는 문자열 치환. 현지의 기능. strReplace(스트링, 늙은, 신규) 한다면 스트링:발견하다('"') 그리고나서 현지의 T={} 위해서 i, 스트레이트 에 아이페어(음.본문.분열되다( 스트링, '"', 진실의 )) 하다 한다면 i%2==1 그리고나서 스트레이트 = 스트레이트:서브(늙은, 신규) 끝. table.insert(T, 스트레이트) 끝. 돌아가다 table.concat(T,'"') 또 다른 돌아가다 스트링:서브(늙은, 신규) 끝. 끝. --------------------------------------------------------------------------------------- -- 처리 날짜 vec -- 입력: -- * datevec - 파손된 {year, month, day, hour, minute, second, tzhour, tzmin} 배열 -- down date-time 컴포넌트 문자열 또는 숫자 -- 출력: -- * 날짜 코드 - 배열의 내용을 지정하는 코드입니다.여기서 Y는 년, M은 월, D는 일, H는 시간, M은 분, S는 두 번째입니다.출력은 YMDHMS, YMDHM, YMD, YM, MD, Y 중 하나여야 합니다. -- * datenum - 같은 배열이지만 숫자 또는 null만 보유합니다. 현지의 기능. parser Datevec(날짜) -- 월이 숫자가 아닌 경우 프로젝트 언어로 된 월 이름인지 확인합니다. 현지의 달 = 날짜[2] 한다면 달 그리고. 달~='' 그리고. 것은 아니다. 톤수(달) 그리고나서 날짜[2] = 음.get Content Language(get Content Language)():포맷 날짜( "n", 달) 끝. -- 제공된 변수를 기반으로 날짜 코드를 만들고 범위를 벗어난 값을 확인합니다. 현지의 최대값 = {제로, 12, 31, 23, 59, 59, 23, 59} -- 년, 월, ...의 최대값 현지의 최소값 = {제로, 1, 1, 0, 0, 0, -23, 0} -- 년, 월, ...의 최소값 현지의 c = {'Y', 'M', 'D', 'H', 'M', 'S', '', ''} 현지의 날짜 코드 = '' -- 제공된 변수의 조합을 나타내는 문자열 현지의 데이터 번호 = {} -- 벡터 = [ year , month , ... , second ]로 인코딩된 날짜 시간 위해서 i = 1,8 하다 데이터 번호[i] = 톤수(날짜[i]) 한다면 데이터 번호[i] 그리고. (i==1 또는 (데이터 번호[i]>=최소값[i] 그리고. 데이터 번호[i]<=>최대값[i])) 그리고나서 날짜 코드 = 날짜 코드 .. c[i] 끝. 끝. 돌아가다 날짜 코드, 데이터 번호 끝. --------------------------------------------------------------------------------------- -- 처리 날짜 vec -- 입력: -- * 날짜 코드 - 배열의 내용을 지정하는 코드입니다.여기서 Y는 년, M은 월, D는 일, H는 시간, M은 분, S는 두 번째입니다.출력은 YMDHMS, YMDHM, YMD, YM, MD, Y 중 하나여야 합니다. -- * datenum - 숫자 또는 null로서 {year, month, day, hour, minute, second, tzhour, tzmin}의 배열 -- 출력: -- * timeStamp - mw.language: formatDate lua 함수 및 {{#time} perser 함수 형식의 날짜 문자열 -- https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#mw.language:formatDate -- https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions #.23 time -- * 날짜 코드 - 수정 가능 현지의 기능. getTimestamp(날짜 코드, 데이터 번호) -- 제공된 변수를 기반으로 타임스탬프 문자열(예: 2000-02-20 02:20)을 만듭니다. 현지의 타임스탬프 한다면 날짜 코드 == 'YMDHMS' 그리고나서 타임스탬프 = string.format('%04i-%02i-%02i:%02i', 데이터 번호[1], 데이터 번호[2], 데이터 번호[3], 데이터 번호[4], 데이터 번호[5], 데이터 번호[6] ) 그렇지 않으면 날짜 코드 == 'YMDHM' 그리고나서 타임스탬프 = string.format('%04i-%02i-%02i %02i:%02i', 데이터 번호[1], 데이터 번호[2], 데이터 번호[3], 데이터 번호[4], 데이터 번호[5] ) 그렇지 않으면 날짜 코드:후보선수(1,3)=='YMD' 그리고나서 타임스탬프 = string.format('%04i-%02i-%02i', 데이터 번호[1], 데이터 번호[2], 데이터 번호[3] ) 날짜 코드 = 'YMD' -- 'YMD', 'YMDHMS' 및 'YMDHM'은 'YMD'로 시작하는 유일한 형식입니다. 다른 모든 형식은 'YMD'로 변환됩니다. 그렇지 않으면 날짜 코드 == 'YM' 그리고나서 타임스탬프 = string.format('%04i-%02i', 데이터 번호[1], 데이터 번호[2] ) 그렇지 않으면 날짜 코드:후보선수(1,1)=='Y' 그리고나서 타임스탬프 = string.format('%04i', 데이터 번호[1] ) 날짜 코드 = 'Y' 그렇지 않으면 날짜 코드 == 'M' 그리고나서 타임스탬프 = string.format('%04i-%02i-%02i', 2000, 데이터 번호[2], 1 ) 그렇지 않으면 날짜 코드 == 'MD' 그리고나서 타임스탬프 = string.format('%04i-%02i-%02i', 2000, 데이터 번호[2], 데이터 번호[3] ) 또 다른 타임스탬프 = 제로 -- 형식은 지원되지 않습니다. 끝. 돌아가다 타임스탬프, 날짜 코드 끝. --------------------------------------------------------------------------------------- -- 선행 0을 1000년 전에 잘라냅니다. -- 입력: -- * datestr - 변환된 날짜 문자열 -- * lang - 번역 언어 -- 출력: -- * datestr - 갱신된 날짜 문자열 현지의 기능. 트림 연도(데이터, 연도, 언어) 현지의 연도 0, 연도 Str1, 연도 Str2, 제로 스트러 연도 0 = string.format('%04i', 연도 ) -- 표준 형식 "0123"의 4자리 연도 연도 Str1 = 음.언어.신규(언어):포맷 날짜( 'Y', 연도 0) -- {{#time}} 파서 함수를 호출하는 것과 같습니다. --yearStr1 = mw.getCurrentFrame(): callParserFunction("#time", {'Y', yearStr0, lang}) -- 언어 변환 한다면 연도 0==연도 Str1 그리고나서 --대부분의 언어는 표준 연식을 사용한다. 연도 Str2 = 스트링(연도) 또 다른 -- 일부 언어에서는 숫자에 다른 문자를 사용합니다. 연도 Str2 = 연도 Str1 제로 스트러 = 음.스트링.후보선수(연도 Str1,1,1) -- 어떤 언어로든 "0"을 받습니다. 위해서 i=1,3 하다 -- 선행 0을 잘라냅니다. 한다면 음.스트링.후보선수(연도 Str2,1,1)==제로 스트러 그리고나서 연도 Str2 = 음.스트링.후보선수(연도 Str2, 2, 5-i) 또 다른 브레이크. 끝. 끝. 끝. 돌아가다 string.gsub(데이터, 연도 Str1, 연도 Str2 ) -- datestr에서는 long year를 trimed year로 바꿉니다. 끝. --------------------------------------------------------------------------------------- -- {{#time}} 파서 함수에 전달될 올바른 형식 문자열을 검색합니다. -- 입력: -- * 날짜 코드: YMDHMS, YMDHM, YMD, YM, MD, Y 또는 M -- * day : 1 ~31 의 숫자(대부분의 언어에서는 불필요) -- * lang : 언어 -- 출력: -- * dFormat : {{#time} 함수에 입력 현지의 기능. get Date Format(날짜 형식)(날짜 코드, 하루, 언어) 현지의 기능. 해석 형식(d포맷, 하루) 한다면 d포맷:발견하다('디폴트') 그리고. #d포맷>10 그리고나서 -- dFormat 코드의 특수한(및 난잡한) 경우는, 일수에 따라 다릅니다. -- 그러면 json에는 "default" 필드와 2자리 day 키가 포함된 json이 더 많은 문자열이 포함됩니다. -- 원하는 날짜가 해당 json이 아닌 경우 "default" 대소문자를 사용합니다. d포맷 = d포맷:서브('”','"') -- json 마킹에 사용되는 화려한 이중 따옴표를 스트레이트 따옴표로 변경합니다. 현지의 D = 음.본문.json 디코드( d포맷 ) --com = mw.dumpObject(D) 하루 = string.format('d%02i',하루) -- 요일 키 생성 d포맷 = D[하루] 또는 D.체납 d포맷 = d포맷:서브("'", '"') -- 작은따옴표를 큰따옴표로 변경하여 {{#time}} 표시에 사용합니다. 끝. 돌아가다 d포맷 끝. 현지의 T = {} 현지의 탭 = 음.익스텐트.데이터..얻다('DateI18n.탭', 언어) 위해서 _, 배를 젓다 에 쌍들(탭.데이터.) 하다 -- 출력을 사전 테이블로 변환합니다. 현지의 아이디, _, 메시지 = 개봉하다(배를 젓다) T[아이디] = 메시지 끝. 현지의 d포맷 = T[날짜 코드] 한다면 d포맷=='디폴트' 그리고. (날짜 코드=='YMDHMS' 또는 날짜 코드=='YMDHM') 그리고나서 -- 대부분의 언어에서 hour:minute:second는 ", HH:MM:SS를 추가함으로써 이루어집니다. -- day precision date. 이러한 언어는 DateI18n.tab에서 건너뛰고 기본값으로 -- "default"라는 단어를 저장하는 영어 d포맷 = 해석 형식(T['YMD'], 하루).. ', H:i' 한다면 날짜 코드=='YMDHMS' 그리고나서 d포맷 = d포맷 .. ':s' 끝. 또 다른 d포맷 = 해석 형식(d포맷, 하루) 끝. 돌아가다 d포맷 끝. --------------------------------------------------------------------------------------- -- {{#time}} 파서 함수에 전달될 올바른 형식 문자열을 검색합니다. -- 입력: -- * month : 월 번호 -- * case : "ins", "loc"와 같은 알파벳 대소문자 생략형 -- * lang : 언어 -- 출력: -- * dFormat : {{#time} 함수에 입력 현지의 기능. Month Case(월간 케이스(달, 사례., 언어) 현지의 T = {{},{},{},{},{},{},{},{},{},{},{},{}} 현지의 탭 = 음.익스텐트.데이터..얻다('I18n/MonthCase.탭', 언어) 위해서 _, 배를 젓다 에 쌍들(탭.데이터.) 하다 현지의 m번째, cs, 메시지 = 개봉하다(배를 젓다) T[m번째][cs] = 메시지 끝. 돌아가다 T[달][사례.] 끝. -- ================================================== -- === 외부 기능 =========================== -- ================================================== 현지의 p = {} --[[ ======================================================================================== 날짜. 이 함수는 ISOdate 템플릿의 핵심 부분입니다. 사용방법: 로컬 날짜 = 필수('모듈:DateI18n')._날짜 local dateStr = Date ({2020, 12, 30, 12, 20, 11} lang) 파라미터: * {year, month, day, hour, minute, second, tzhour, tzmin: 날짜-시간 구성 요소 문자열 또는 숫자 분해 tzhour, tzmin은 UTC로부터의 타임존 오프셋(시간 및 분)입니다. * 언어:표시할 언어 * 케이스: 일부 언어의 언어 형식(유전자 등) * 클래스: <time> 노드의 CSS 클래스, 메타데이터가 전혀 없는 경우 " 를 사용합니다. ]] 기능. p._날짜(날짜, 언어, 사례., 학급, 트리밍_년) --입력 형식이 올바른지 확인합니다. 한다면 것은 아니다. 언어 또는 것은 아니다. 음.언어.isValidCode( 언어 ) 그리고나서 언어 = 음.get Current Frame(전류 프레임)():callParser 기능( "int", "실패" ) --사용자가 선택한 언어를 가져옵니다. 끝. 한다면 언어 == '타르스크' 그리고나서 언어 = 'X세' 끝. -- datevec을 처리하여 timeStamp 및 datecode 문자열 및 숫자 데이터 번호 배열 추출 현지의 날짜 코드, 데이터 번호 = parser Datevec(날짜) 현지의 연도, 달, 하루 = 데이터 번호[1], 데이터 번호[2], 데이터 번호[3] 현지의 타임스탬프, 날짜 코드 = getTimestamp(날짜 코드, 데이터 번호) 한다면 것은 아니다. 타임스탬프 그리고나서 -- parser Datevec에서 문제가 발생했습니다. 돌아가다 '' 끝. -- Commons [[ 데이터:DateI18n.tab] 페이지에는 다른 기본 포맷이 저장됩니다. -- 언어 및 날짜 코드(연월일 또는 연월일 지정 등) -- {{#time}} 함수에 대한 국가별 형식 입력 조회 현지의 d포맷 = get Date Format(날짜 형식)(날짜 코드, 하루, 언어) -- 기본적으로는 대소문자는 지정되지 않습니다(case=="). 형식을 지정할 수 있습니다. --[데이터:DateI18n.tab] ] 。이 달의 기본 문법 대소문자를 다음과 같이 덮어쓸 수 있습니다. -- "case" 변수를 지정합니다.이것은 슬라브어족 언어들이 보다 복잡한 것을 만들기 위해 주로 필요하다. -- [c:Module]의 문구를 사용합니다.복잡한 날짜]] 사례. = 사례. 또는 '' 한다면 (언어=='큐' 또는 언어=='큐') 그리고. (사례.=='nom') 그리고나서 케추아어, 키차어 관련 특례.I18n의 폼은 -- {#time}에서 제공하는 월 이름에 접미사 "pi"가 추가된 일반 대소문자 -- "pi"를 삭제해야 하는 주격의 경우 -- 2014년부터 https://commons.wikimedia.org/wiki/Template_talk:Date#Quechua를 참조해 주세요. d포맷 = d포맷:서브('F' pi', 'F') 그렇지 않으면 (사례.=='gen') 그리고나서 d포맷 = strReplace(d포맷, 'F', "xg") 그렇지 않으면 (사례.=='nom') 그리고나서 d포맷 = strReplace(d포맷, "xg", 'F') 그렇지 않으면 (사례. ~= '') 그리고나서 -- 참조는 페이지 [[Data:Commons의 I18n/MonthCases.tab]에는 달의 이름이 있습니다. -- 원하는 언어로 된 특정 문자/문자/문자/문자/문자/문자/문자/문자.교환이 아니라 가지고 있는 경우 -- dFormat의 "F" 및 xg" 현지의 월 메시지 = Month Case(월간 케이스(달, 사례., 언어) 한다면 월 메시지 그리고. 월 메시지 ~= '' 그리고나서 -- 존재하는지 확인합니다. d포맷 = strReplace(d포맷, 'F', '"'..월 메시지..'"') -- 기본 월을 이미 검색한 월 이름으로 바꿉니다. d포맷 = strReplace(d포맷, 'xg', '"'..월 메시지..'"') 끝. 끝. -- 지정된 형식을 사용하여 날짜 번역합니다. -- https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#mw.language:formatDate 및 -- https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions # # # time (영어) 현지의 데이터 = 음.언어.신규(언어):포맷 날짜( d포맷, 타임스탬프) -- {{#time}} 파서 기능을 사용하는 것과 같습니다. --태양력과 관련된 특별한 경우: 1940년 이전에는 새해가 달랐다. -- 1년 중 시기, 그러니까 그냥 년(datecode==')Y')는 모호하며 "YYYY 또는 YYY" 문구로 대체됩니다. 한다면 언어=='th' 그리고. 날짜 코드=='Y' 그리고. 연도<=>1940 그리고나서 데이터 = string.format('%04i', 연도+542, 연도+543 ) 끝. -- 연도가 1000 미만인 경우 날짜를 4자리 길이로 패딩하거나 트리밍합니다. -- 연도가 0으로 채워질지 여부를 결정합니다(0~999년 범위의 연도). 한다면 연도 그리고. 연도< >1000 그리고나서 한다면 유형(트리밍_년)=='실패' 그리고나서 트리밍_년 = '100-999' 끝. 현지의 다듬다 = 네, 아니요(트리밍_년,제로) -- 부울로 변환합니다. 한다면 다듬다==제로 그리고. 유형(트리밍_년)=='문자열 그리고나서 -- "trim_year"가 단순한 True/False가 아닌 경우 날짜 범위보다 커집니다. -- 예를 들어 '100-999'는 1자리 및 2자리 연도를 4자리 길이로 패딩하고 3자리 연도를 그대로 유지하는 것을 의미합니다. 현지의 YMin, YMax = 트리밍_년:경기( '(%d+)'-(%d+)' ) 다듬다 = (YMin~=제로 그리고. 연도>=톤수(YMin) 그리고. 연도<=>톤수(YMax)) 끝. 한다면 다듬다==진실의 그리고나서 데이터 = 트림 연도(데이터, 연도, 언어) -- datestr에서는 long year를 trimed year로 바꿉니다. 끝. 끝. -- 타임존이 있는 경우 추가 한다면 데이터 번호[7] 그리고. (날짜 코드 == 'YMDHMS' 또는 날짜 코드 == 'YMDHM') 그리고나서 -- {{#time}} 파서 함수를 사용하여 타임존 문자열을 만들고 올바른 문자 집합을 사용합니다. 현지의 서명하다 = (데이터 번호[7]< >0) 그리고. '−' 또는 '+' 타임스탬프 = string.format("2000-01-01 %02i: %02i:00", math.abs(데이터 번호[7]), 데이터 번호[8] 또는 0) 현지의 시간대 = 음.언어.신규(언어):포맷 날짜( 'H:i', 타임스탬프) -- {{#time}} 파서 기능을 사용하는 것과 같습니다. 데이터 = string.format(%s %s %s, 데이터, 서명하다, 시간대 ) 끝. -- html 날짜 문자열의 형식 및 태그 지정 한다면 학급 그리고. 학급 ~= '' 그리고. 날짜 코드~='M' 그리고. 날짜 코드~='MD'그리고나서 현지의 날짜 Html 태그 = '<span style="white-space:nowrap"> <time class=s" datetime=s"> %s </time> </span>' 데이터 = 날짜 Html 태그:포맷(학급, 타임스탬프, 데이터) 끝. 돌아가다 데이터 끝. --[[ ======================================================================================== 날짜. 이 함수는 ISOdate 템플릿의 핵심 부분입니다. 사용방법: {{#제외:DateI18n 날짜 연도=월=일=시간=분=초=tzhour=tzmin=lang=en} 파라미터: * 년, 월, 일, 시, 분, 초: 날짜-시간 구성 요소 문자열 분해 * tzhour, tzmin: UTC로부터의 시간대 오프셋(시간 및 분) * 언어:표시할 언어 * 케이스: 일부 언어의 언어 형식(유전자 등) * 클래스: <time> 노드의 CSS 클래스, 메타데이터가 전혀 없는 경우 " 를 사용합니다. ]] 기능. p.날짜.(틀) 현지의 args = {} 위해서 이름., 가치 에 쌍들( 틀.args ) 하다 이름. = string.gsub( string.lower(이름.), ' ', '_') args[이름.] = 가치 끝. 돌아가다 p._날짜( { args.연도, args.달, args.하루, args.한 시간, args.극히 작은, args.둘째, args.시간, args.쯔민 }, args.언어, --언어 args.사례., -- 해당 언어를 사용하는 언어의 해당 달의 문법 대소문자를 지정합니다. args.학급 또는 '시작하지 않음, -- 날짜가 포함된 시간 노드의 html 클래스를 설정합니다.이것은 마이크로포맷에 유용합니다. args.트리밍_년 또는 '100-999' -- 디폴트로는 1 및2 자리수의 연수는 4 자리수의 길이이며, 3 자리수의 연수는 그대로입니다. ) 끝. 돌아가다 p