2016-10-31 2 views
0

전자 메일에서 여러 가지 가능한 형식으로 날짜를 추출한 다음 ISO 형식이 필요한 응용 프로그램에 전달하고 있습니다. 나는 moment.js를 사용하여 다양한 형식으로 날짜를 파싱 할 수 있다고 들었습니다.moment.js로 임의의 날짜/시간 구문 분석

Found: 1/22/2016 
Milliseconds: 1453449600000 
ISO: Fri Jan 22 2016 00:00:00 GMT-0800 (PST) 

Found: Jan 22 2016 
Milliseconds: 1453449600000 
ISO: Fri Jan 22 2016 00:00:00 GMT-0800 (PST) 

Found: 2016/1/22 03:00 
Milliseconds: 1453460400000 
ISO: Fri Jan 22 2016 03:00:00 GMT-0800 (PST) 

이러한 모든 형식 및 기타 형식을 분석하는 데 시간을 어떻게 사용합니까?

var foundDue = taskNote.match(/(Deadline|Due):.*(\n|$)/ig); 
// if we've found a deadline date... 
if (foundDue) { 
    // Remove deadline/due tag 
    foundDue = foundDue[0].replace(/(Deadline|Due):? */i, ""); 
    // Remove trailing and leading spaces 
    foundDue = foundDue.replace(/(^\s*|\s$)*/, ""); 
    console.log("Found: "+ foundDue); 
    // Use a magic method to parse date 
    milliseconds = moment.??????(foundDue); 
    console.log("Milliseconds: "+ milliseconds); 
    console.log("Parsed2: "+ new Date(foundDue)); 
    var taskDue = new Date(milliseconds); 
    console.log("ISO: "+ taskDue); 
} 

참고로이 질문은 earlier question에서 변경되었습니다.

+0

'1/22/2016'의 예는 명확하지만 이메일의 날짜가 '1/2/2016'인 경우 어떻게됩니까? - 1 월 2 일인지 2 월 1 일인지 어떻게 알 수 있습니까? – nnnnnn

답변

0

moment parsing with multiple formats을 사용하면 입력 문자열을 순간 오브젝트로 변환 할 수 있습니다. 그러면 valueOf() 순간을 사용하여 밀리 초를 얻을 수 있습니다. 여기

질문에 주어진 입력에 대한 예제 코드 조각 :

var inputs = ['1/22/2016', 'Jan 22 2016', '2016/1/22 03:00']; 
 

 
for(var i=0; i<inputs.length; i++){ 
 
    var m = moment(inputs[i], ['M/D/YYYY', 'MMM D YYYY', 'YYYY/M/D HH:mm']); 
 
    console.log(m.format(), m.valueOf()); 
 
}
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.2/moment.min.js"></script>

여러 형식으로 사용할 때 워드 프로세서, 말한대로, :

을 Moment는 사용할 간단한 형식을 결정하기 위해 간단한 경험적 방법을 사용합니다. 순서대로 :

  • 유효하지 않은 날짜보다 유효한 날짜 형식을 사용하는 것이 좋습니다.
  • 적은 수의 문자열보다 더 많은 수의 구문을 분석하고 적은 수의 형식보다 많은 형식을 사용하는 형식을 선호합니다. 즉, 더 엄격한 구문 분석을 선호합니다.
  • 나중에 배열보다 먼저 형식을 사용하는 것이 좋습니다. 위의 코드 샘플에서

01/02/2016 같은 모호한 입력은 항상 January 2nd 2016로 분석됩니다.