--[[ 이 모듈은 날짜 문자열 처리를 목적으로 합니다. 모듈에서 변경 사항을 먼저 적용하지 않고 이 코드를 수정하지 마십시오.ISO 날짜/샌드박스 및 테스트 모듈:ISO 날짜/샌드박스/테스트 케이스 및 모듈 토크:ISO 날짜/샌드박스/테스트 케이스. 작성자 및 유지관리자: * 사용자:Parent5446 - 함수 모방 템플릿의 원래 버전:ISO 날짜 * 사용자: Jarekt - 템플릿을 모방한 함수의 원래 버전:날짜 및 템플릿:ISO년 ]] 현지의 p = {} -- ======================================= -- === 종속성 ====================== -- ======================================= 현지의 D = 요구하다('모듈:날짜 18n') -- c:Module의 enwp 버전:날짜. --[[ ISO년 이 함수는 날짜 문자열의 연도 부분을 반환합니다. 사용방법: {{#제외:ISOdate ISO year target_string} 파라미터 1: 날짜 문자열 오류 처리: 문자열에 연도가 포함되어 있지 않은 경우 함수는 아무것도 반환하지 않습니다. 이는 템플릿에 대해 권장되는 처리입니다.호출하는 기본(유일한?) 템플릿인 생성자. ]] 기능. p.ISO년( 틀 ) 돌아가다 p._ISO년( 틀.args[1] ) 끝. 기능. p._ISO년( 입력 ) 한다면 것은 아니다. 입력 그리고나서 돌아가다 '' 끝. 입력 = 음.본문.다듬다( 입력 ) -- 빈 문자열일 경우 반환한다. 한다면 입력 == "" 그리고나서 돌아가다 입력 끝. -- 번호가 있으면 반환한다. 한다면 톤수( 입력 ) 그리고나서 돌아가다 음.스트링.포맷( '%04i', 입력 ) 끝. --그렇지 않으면 정규 표현 일치를 사용합니다. 입력 = 음.스트링.경기( 입력, '^+?(-?%d%d?%d?%d?%d?-' ) 한다면 입력 그리고. 톤수( 입력 ) 그리고나서 돌아가다 음.스트링.포맷( '%04i', 입력 ) 또 다른 돌아가다 '' 끝. 끝. --[[ ISO 날짜 이 함수는 ISOdate 템플릿의 핵심 부분입니다. 사용방법: {{#제외:ISOdate ISOdate target_string lang=} 파라미터: 1: 날짜 문자열 lang: 표시할 언어 형식: 일부 언어의 언어 형식(유전자 등) class: <time> 노드의 CSS 클래스 오류 처리: 문자열에 적절한 ISO 날짜가 포함되어 있지 않은 경우 이 함수는 원래 문자열을 반환합니다. 이는 템플릿에 대해 권장되는 처리입니다.그것을 호출하는 정보(및 유사한 템플릿). ]] 기능. p.ISO 날짜(틀) 현지의 데이터, 성공했다 현지의 args = 틀.args 한다면 것은 아니다. (args.언어 그리고. 음.언어.is Supported Language(지원 언어)(args.언어)) 그리고나서 args.언어 = 틀:callParser 기능( "int", "실패" ) --사용자가 선택한 언어를 가져옵니다. 끝. 데이터, 성공했다 = p._ISOdate( 음.본문.다듬다(args[1]), args.언어, --언어 args.사례. 또는 '', -- 해당 언어를 사용하는 언어의 해당 달의 문법 대소문자를 지정합니다. args.학급 또는 '시작하지 않음, -- 날짜가 포함된 시간 노드의 html 클래스를 설정합니다. args.트리밍_년 또는 '100-999' -- 디폴트로는 1 및2 자리수의 연수는 4 자리수의 길이이며, 3 자리수의 연수는 그대로입니다. ) 돌아가다 데이터 끝. 기능. p._ISOdate(데이터, 언어, 사례., 학급, 트리밍_년) -- pattern: regexp - 테스트할 정규 표현, dlen - 날짜 요소 수, tail = "꼬리" 요소인 경우 -- regexp 힌트: -- 1) "^"로 시작하여 "$"로 끝나는 문자열은 문자열 전체가 일치함을 나타냅니다. -- 2) 옵션의 테일 부분이 그대로 복사되어 해석된 날짜의 주요 부분에 이어 공백으로 날짜로부터 분리되어야 합니다.따라서 (\s.+)?" 현지의 패턴 = { -- YYY-MM-DD HH로 시작하는 문자열:MM:SS. 4번째 자리(지난 100년 이내 초수를 알 수 있는 경우), 나머지 1-2 자리 -- 날짜와 시간은 공백 또는 "T"로 구분할 수 있으며, 끝에 "Zulu" 시간대를 나타내는 "Z"가 있을 수 있습니다. {일람=6, 꼬리=7, regexp=^+?(%d%d%d%d)-(%d%d?)-(%d%d?)[T](%d%d?):(%d%d?):(%d%d?)Z?(%s.*)"}, {일람=6, 꼬리=0, regexp=^+?(%d%d%d%d)-(%d%d?)-(%d%d?)[T](%d%d?):(%d%d?):(%d%d?)Z?$"}, -- YYY-MM-DD HH:MM으로 시작하는 문자열. 4년째 자리, 나머지 1-2 자리 --(아마 1000년이 지난 후보다 시간과 분을 더 잘 알고 있다면) {일람=5, 꼬리=6, regexp=^+?(%d%d%d%d)-(%d%d?)-(%d%d?)[T](%d%d?):(%d%d?)(%s.+)"}, {일람=5, 꼬리=0, regexp=^+?(%d%d%d%d)-(%d%d?)-(%d%d?)[T](%d%d?):(%d%d?)$"}, -- YYY-MM-DD로 시작하는 문자열.1~4번째 자리, 나머지 1-2 자리 {일람=3, 꼬리=4, regexp=^+?(%d%d?%d?%d?)-(%d%d?)-(%d%d?)(%s.+)}, {일람=3, 꼬리=0, regexp=^+?(%d%d?%d?%d?)-(%d%d?)-(%d%d?)-(%d%d?)$"}, -- YYY-MM으로 시작하는 문자열. 년도 3~4자리, 월 2자리 -- (10-5=5와 같은 날짜 문자열로 변환하는 것을 희망합니다) {일람=2, 꼬리=3, regexp=^+?(%d%d%d%d?)-(%d%d)(%s.+)}, -- 문자열 전체가 YYY-MM 형식인 경우: 1 ~4 자리수의 경우, 1 ~2 자리수의 달 {일람=2, 꼬리=0, regexp=^+?(%d%d?%d?%d?%d?)-(%d%d?)$"}, -- string은 숫자로 시작합니다.-> 3자리 또는4자리 길이로 해야 1년이 됩니다. {일람=1, 꼬리=2, regexp="^+?" (%d%d%d%d? (%s.+)"}, -- 문자열 전체가 숫자(1-4자리 길이)일 경우 년으로 해석됩니다. {일람=1, 꼬리=0, regexp="^+? (%d%d?%d?%d?%d?%d?)$"}, } -- 제공된 변수를 기준으로 날짜 벡을 만듭니다. 현지의 날짜, 꼬리, format Num 날짜, 꼬리, format Num = p.test_date_module(데이터 또는 '', 패턴) 한다면 날짜[1]=='' 또는 날짜[1]==제로 그리고나서 -- datestr가 날짜로 보이지 않는 경우(템플릿일 수 있음) 빠르게 반환 돌아가다 데이터, 거짓의 끝. -- p 에 콜 합니다.날짜 문자열 형식을 지정하는 날짜 함수 현지의 성공했다, 데이터 2 성공했다, 데이터 2 = pcall( D._날짜, 날짜, 언어, 사례., 학급, 트리밍_년) 한다면 성공했다 그리고. 데이터 2~='' 그리고나서 돌아가다 음.본문.다듬다( 데이터 2 .. 꼬리), 진실의 또 다른 -- 에러가 발생했을 경우, 원래의 문자열을 반환합니다. 돌아가다 데이터, 거짓의 끝. 끝. 기능. p.ISOdate_extended(틀) -- pattern: regexp - 테스트할 정규 표현, dlen - 날짜 요소 수, tail = "꼬리" 요소인 경우 -- regexp 힌트: -- 1) "^"로 시작하여 "$"로 끝나는 문자열은 문자열 전체가 일치함을 나타냅니다. -- 2) 옵션의 테일 부분이 그대로 복사되어 해석된 날짜의 주요 부분에 이어 공백으로 날짜로부터 분리되어야 합니다.따라서 (\s.+)?" 현지의 데이터, 성공했다 현지의 args = 틀.args 한다면 것은 아니다. (args.언어 그리고. 음.언어.is Supported Language(지원 언어)(args.언어)) 그리고나서 args.언어 = 틀:callParser 기능( "int", "실패" ) --사용자가 선택한 언어를 가져옵니다. 끝. 데이터, 성공했다 = p._ISOdate( 음.본문.다듬다(args[1]), args.언어, --언어 args.사례. 또는 '', -- 해당 언어를 사용하는 언어의 해당 달의 문법 대소문자를 지정합니다. args.학급 또는 '시작하지 않음, -- 날짜가 포함된 시간 노드의 html 클래스를 설정합니다. args.트리밍_년 또는 '100-999' -- 디폴트로는 1 및2 자리수의 연수는 4 자리수의 길이이며, 3 자리수의 연수는 그대로입니다. ) 한다면 성공했다 그리고나서 돌아가다 데이터 끝. 현지의 패턴 = { -- MM/DD/YYY와 같은 확장된 형식의 집합 {일람=3, 꼬리=4, regexp=^(%d%d?)[-/](%d%d?)[-/](%d%d%d%d%d)(%s.+)}, {일람=3, 꼬리=0, regexp="^(%d%d?)[-/](%d%d?)[-/](%d%d%d%d%d)$"}, {일람=3, 꼬리=0, regexp="^(%d%d?)%s(%w+)%s(%d%d%d%d%d)$"}, {일람=3, 꼬리=0, regexp="^(%w+)%s(%d%d?),%s(%d%d%d%d)$"}, } 현지의 날짜, 꼬리, format Num, 카테고리 = '' 날짜, 꼬리, format Num = p.test_date_module(틀.args[1], 패턴) 한다면 format Num==1 또는 format Num==2 그리고나서 VEC = 날짜; 한다면 톤수(날짜[1])>12 그리고나서 틀.args[1] = string.format('%04i-%02i-%02i', 날짜[3], 날짜[2], 날짜[1] ) 카테고리 = '[카테고리:DD/MM/YYY 형식의 날짜]' 돌아가다 음.본문.다듬다( p.ISO 날짜(틀) .. 꼬리); 그렇지 않으면 톤수(날짜[2])>12 그리고나서 틀.args[1] = string.format('%04i-%02i-%02i', 날짜[3], 날짜[1], 날짜[2] ) 카테고리 = '[카테고리:날짜(MM/DD/YYY 형식)]' 돌아가다 음.본문.다듬다( p.ISO 날짜(틀) .. 꼬리); 끝. 그렇지 않으면 (format Num==3 또는 format Num==4) 그리고. (날짜[3]=='' 또는 날짜[3]~=제로) 그리고나서 현지의 스트레이트 = 음.get Current Frame(전류 프레임)():callParser 기능( "#시간", { 'Y-m-d', 데이터} ) 현지의 VEC = {스트레이트:경기( ^(%d%d?%d?%d?)-(%d%d?)-(%d%d?)-(%d%d?)$" )} 한다면 VEC 그리고. VEC[1]~=제로 그리고나서 틀.args[1] = string.format('%04i-%02i-%02i', VEC[1], VEC[2], VEC[3] ) 카테고리 = '[카테고리:워드 형식의 날짜]' 돌아가다 p.ISO 날짜(틀); 끝. 끝. 돌아가다 데이터 끝. 기능. p.test_date_module(데이터, 패턴) -- pattern: regexp - 테스트할 정규 표현, dlen - 날짜 요소 수, tail = "꼬리" 요소인 경우 현지의 날짜 = {'','','','','',''} 현지의 꼬리 = '' 현지의 VEC, 쓰다듬다 현지의 format Num = 0 위해서 i, 쓰다듬다 에 아이페어( 패턴 ) 하다 VEC = {데이터:경기( 쓰다듬다.regexp )} 한다면 VEC 그리고. VEC[1]~=제로 그리고나서 위해서 j=1,쓰다듬다.일람 하다 날짜[j] = VEC[j] 끝. 한다면 쓰다듬다.꼬리>0 그리고. VEC[쓰다듬다.꼬리]~=제로 그리고나서 꼬리 = 음.스트링.서브(' ' .. VEC[쓰다듬다.꼬리], ' +', ' ') 끝. format Num = i 브레이크. 끝. 끝. 돌아가다 날짜, 꼬리, format Num 끝. 돌아가다 p