2011-08-24 2 views
3

날짜 (현지화 된 날짜 포함) 및 기타 필드를 포함하는 데이터 테이블을 정렬하는 자바 스크립트 코드를 작성 중입니다. 예 :JavaScript에서 현지화 된 날짜를 표준 날짜로 변환하는 방법은 무엇입니까?

"lunes, 29 de agosto de 2011", "field1", "field2" 
"lunes, 28 de agosto de 2011", "field1", "field2"... 

날짜별로 정렬하는 동안 표준 Javascript 날짜 개체로 변환하여 날짜를 비교해야합니다. 현지화 된 날짜를 표준 날짜로 변환 할 수있는 방법이 있습니까?

답변

0

입력 데이터를 dd, mm, yyyy 숫자 형식으로 변환 한 다음 Date 생성자에 전달해야합니다. mm은 0의 상대 값입니다.

예를 들어,/(/ d {1,2}) de ([az] +) de (/ d {4})의 regExp는 배열을 사용하여 일과 연도를 숫자로 제공합니다 달 이름의 경우 indexOf가 월 번호를 제공합니다.

각 언어마다 특정 달 테이블 또는 reg exp가 필요합니다.

+0

dd, mm, yy로 변환하는 방법을 묻습니다 ... 독일어, 프랑스어, 스페인어 등 여러 로케일에서 날짜를 변환해야합니다. –

0

나는 로케일 특정 월 이름을 숫자 (그리고 요일 이름도 가능)와 공통 날짜 형식의 목록으로 역 매핑합니다. 그런 다음 각 문자열을 해당 형식으로 검사하고 일치하는 경우 값 (예 : 정규 표현식)을 파싱하고 추출 된 데이터를 사용하여 JavaScript Date를 구성 할 수 있습니다. 여기

은 (단지 그림을 위해 작동하는 것은 아니다) 아이디어를 보여주기 위해 일부 의사 코드 :
var i18nDate = { 
    'es': { 
    'days': ['lunes', 'martes', 'miercoles', ...], 
    'months': ['enero', 'febrero', 'marzo', ...], 
    }, 
    // ... for each locale. 
}; 

var i18nFormat = { 
    'es': [ 
    new RegExp(// Format 1, e.g. "lunes, 29 de agosto de 2011" 
     '(' + i18nDate.es.days.join('|') + ')' + ', de (\d+) ' 
     + '(' + i18nDate.es.months.join('|') + ')' + ' de (\d+)'), 
    // ... for each common date format. 
    ], 
    // ... for each locale. 
}; 

function parseI18nDate(s) { 
    var locale, formats, i, m; 
    for (locale in i18nFormat) { 
    formats = i18nFormat[locale]; 
    for (i=0; i<formats.length; i++) { 
     if (m = s.match(formats[i])) { 
     return new Date(m[x], m[y], m[z]); 
     // TODO: mapping of field position to date component. 
     } 
    } 
    } 
    return null; 
} 

은 분명히 로케일 특정 형식과 값을 포함 밖으로 일 할 많은 세부 사항이 있습니다. 그 노력은 본격적인 도서관을 보증 할만큼 충분히 크다. 아마도 이미 그런 일을하는 오픈 소스 프로젝트가 있습니까?

+0

제안 해 주셔서 감사합니다. –

3

그 목적을위한 최상의 라이브러리는 아마도 Globalize 일 것입니다. 그것은 당신이 (가 문화라고하지만 실제로 동일하다) 형식 (내장 또는 자신의) 주어진 날짜에 실제로 구문 분석 문자열을 로케일을 지정할 수 있습니다 :

var dateString = "lunes, 29 de agosto de 2011"; 
// seems like long date format in Spanish 
var date = Globalize.parseDate(dateString, "D", "es"); 

당신은 첨부 할 필요가 적절한 문화 파일을 작성하고 Globalize를 참조하여 작업하게하십시오. 문화권은 이미 도서관에 정의되어 있으므로 웹 페이지의 메시지를 두려워하지 말고 실제로 에는 .Net이 필요하지 않습니다.

+0

라이브러리를 유용하게 보이고 있습니다. 나를. 내 라이브러리를 작성하는 대신 입증 된 라이브러리를 사용하는 것이 낫기 때문에이 라이브러리를 애플리케이션에 사용하려고합니다. 제안 해 주셔서 감사합니다. –

관련 문제