JS는 다음과 같은 시간 날짜 객체를 얻기위한 다양한 다른 속성 메소드를 제공하지만 : getDate 메서드 | getday 방법 | 유능한 방법 | gethours 방법 ... 등은 사용자가 자신이 제공 한 템플릿 (패턴)에 따라 지정된 시간 개체를 포맷 할 수있는 Java와 같은 방법을 제공하지 않으므로 모든 사람이 -.-를 재미있게 만들 수 있도록 작은 방법을 캡슐화했습니다. 좋은 제안이 있다면 관대하게 추천하고 싶습니다.
지식 포인트 사용 :
인수 :이 객체는 실행되는 함수와이를 호출하는 함수의 매개 변수를 나타냅니다. 명시 적으로 만들 수 없습니다. 길이 속성이 있고 "[]"구문에서 배열처럼 값을 취할 수 있지만 배열은 아닙니다. 타입 객체 : 연산자는 표현식의 데이터 유형을 나타내는 문자열을 반환합니다. 6 가지 가능성 : "숫자", "문자열", "부울", "개체", "기능"및 "정의되지 않은". Object.constructor : 객체를 생성하는 함수를 나타냅니다. 객체는 객체 또는 함수의 이름이어야합니다 . 기본 데이터에는이 속성이 없습니다. 실행 방법 : 정규 표현식 패턴을 사용하여 문자열로 검색을 실행하고 검색 결과가 포함 된 배열을 반환합니다. 일치가 발견되지 않은 다음 NULL을 반환합니다. 배열의 동일한 유형 일치 요소가 반복적으로 나타나지 않습니다. str.split (rex | str) : 문자열을 일반 객체 또는 서브 스트링으로 하위 문자열로 분할 한 다음 결과를 문자열 배열로 반환합니다. Throw Error ( 'msg') : 메시지 정보에 오류가 발생합니다. 던지기 뒤에는 어떤 표현이든 이어질 수 있습니다. For..in, 3 차원 운영자 및 서브 스트리트의 사용도 비교적 간단합니다.
코드 스 니펫 :
코드 사본은 다음과 같습니다.
/**
**** JS 시간 및 날짜 서식 *** <br>
* <p>
* 템플릿 문자열은 엄격한 형식을 채택합니다. 형식을 초과하면 예외가 발생하고 각 형식은 한 번만 나타날 수 있습니다. 예를 들어, yyyy-mm-yyyy 형식은 예외를 던집니다
* </p>
* y 년 길이 : 2/4 비트 <br>
* Q-Quarterly 길이 : 1 자리 <br>
* M 개월 길이 : 1 ~ 2 자리 <br>
* D- 다이 길이 : 1 ~ 2 자리 <br>
* H- 시간 길이 : 1 ~ 2 위치 24 시간 시스템, H : 12 시간 시스템 <br>
* M-length : 1 ~ 2 자리 <br>
* S 초 길이 : 1 ~ 2 비트 <br>
* S-MS 길이 : 1 비트를 수정했습니다
* @param {날짜 유형 개체} 날짜
* @param {문자열 유형 템플릿 문자열} fmt
* @return 형식 시간과 날짜 문자열
* @Author Lyt
*/
함수 dateformat (날짜, fmt) {
if (arguments.length! = 2) // 매개 변수 수 확인
던지기 오류 ( '인수 길이는 불법');
if (! date || (typeof date! = 'Object') || (d.constructor! = date)) // 매개 변수 합법성 검증
던지기 오류 (인수 [0] + ': 유형이 날짜 유형이 아님);
if (/h+/.test(fmt) && /h+/.test(fmt))))
던지기 오류 ( "시간의 형식은 잘못되며 동일한 유형이 연속으로 한 번만 나타날 수 있습니다!");
/* 템플릿 매개 변수 확인, 정기 확인 방법*/
var verify = function (rex) {
var arr = 새로운 regexp (rex) .exec (fmt); // 일치하는 결과 배열을 가져옵니다
if (! arr) // 일치가 실패하면 반환합니다
반품 "";
if (fmt.split (rex) .length> 2) // 같은 유형의 간격이 여러 번 발생합니다.
Throw Error ( "FMT 형식 오류 : 동일한 유형이 연속으로 한 번만 나타날 수 있습니다!");
arr arr [0];
};
/**
* 몇 달, 며칠, 시간, 몇 분 및 초 동안 범용 일치 교체를 제공합니다.
* @param {Object O attribute key} r
* @param {r은 일반 객체} rex에 해당합니다
**/
var common = function (r, rex) {
if (len! = 1 && len! = 2)
던지기 오류 ( "월 형식 오류 : m은 1/2 배만 표시 될 수 있습니다");
len == 2? fmt = fmt.replace (rex, o [r] .length == 1? "0"+o [r] : o [r]) : fmt = fmt.replace (rex, o [r]);
}
var o = {// 데이터 저장 개체
"y +": date.getsyear () + "", // 년
"Q +": Math.floor ((Date.getMonth () + 3) / 3), // Quarterly
"m +": date.getmonth () + 1 + "", // 월
"d +": date.getDate () + "", // day
"h +": date.gethours () + "", // 24:00
"h +": date.gethours () + "", // 12시
"m +": date.getMinutes () + "", // 포인트
"s +": date.getSeconds () + "", // 초
"s+": date.getmilliseconds () // milliseconds
}
for (var r in o) {
var Rex, Len, 임시;
Rex = 새로운 regexp (r);
temp = verify (rex); // 결과 문자열과 일치합니다
len = temp.length; // 길이
if (! len || len == 0)
계속하다;
if (r == "y+") {
if (len! = 2 && len! = 4)
던지기 오류 ( "연도 형식 오류 : y는 2/4 배만 표시 될 수 있습니다");
len == 2? fmt = fmt.replace (rex, o [r] .substr (2,3)) : fmt = fmt.replace (rex, o [r]);
} else if (r == "Q+") {
if (len! = 1)
던지기 오류 ( "분기 별 형식 오류 : Q는 한 번만 나타날 수 있습니다");
fmt = fmt.replace (rex, o [r]);
} else if (r == "h+") {
if (len! = 1 && len! = 2)
던지기 오류 ( "시간 형식 오류 : h는 1/2 회만 발생할 수 있습니다");
var h = (o [r]> 12? o [r] -12 : o [r]) + "";
len == 2? fmt = fmt.replace (rex, h.length == 1? "0"+h : h) : fmt = fmt.replace (Rex, H);
} else if (r == "S+") {
if (len! = 1)
던지기 오류 ( "밀리 초 형식 형식 오류 : s는 한 번만 나타날 수 있습니다");
fmt = fmt.replace (rex, o [r]);
} else {// (r == "m+"|| r == "d+"|| r == "h+"|| r == "m+"|| r == "s+")
COMMON (R, Rex)
}
}
반환 fmt;
}
위의 데모 효과는 참조를위한 것입니다.
코드 사본은 다음과 같습니다. console.log (dateformat (new date (), 'yyyyy's qq m month dd day hh hh hh mint s second s millisecond ');
코드 사본은 다음과 같습니다. console.log (dateformat (new date (), 'yyyyyyyyyyyyyqmmmmmmmmmmmmmmmmmmmmmmmmmmmmm minges s second s millisecond');
The code copy is as follows: console.log(DateFormat(new Date(),'yyyyy', q quarter, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, q, Q, Q, Q, Q, Q, Q, Q, Q, Q, Q, Q, Q, Q, Q, Q, Q, Q, Q, Q, Q, Q, Q, Q, Q, Q, Q, Q, Q, Q, Q, Q, Q, Q, Q, Q, Q, Q, Q, Q, Q, Q, Q, Q, Q, Q.
코드 사본은 다음과 같습니다. console.log (dateformat ( "나는 시간 개체가 아니다", 'yyyyy 년 Q Quarter m month dd day hh 시간 m 분 m 초 S 밀리 초');
코드 사본은 다음과 같습니다. console.log (dateformat (새 날짜 (), 'yyyyy's qq mmm month ddd day hh hh hh 시간 m 분 s 초 S 밀리 초 '));
다른 효과를 하나씩 나열하지는 않습니다. 관심이 있으시면 코드를 복사하여 직접 테스트 할 수 있습니다. 최적화 해야하는 버그 나 영역이 있으면 관대 한 알림을 제공하십시오.
위는이 매우 유용한 캡슐화 기능에 대한 소개입니다. 실용적이지 않습니까? 친구는 프로젝트에서 직접 사용할 수 있습니다.