Javascript에서 ISO 8601 날짜 구문 분석
다음 구조의 ISO 8601 날짜를 자바 스크립트로 변환하는 방법에 대한 도움말 / 팁이 필요합니다.
CCYY-MM-DDThh:mm:ssTZD
다음과 같이 날짜 형식을 지정하고 싶습니다.
January 28, 2011 - 7:30PM EST
이 솔루션을 가능한 한 깨끗하고 최소한으로 유지하고 싶습니다.
datejs 는 다음을 구문 분석 할 수 있으므로 시도해 볼 수 있습니다.
Date.parse('1997-07-16T19:20:15') // ISO 8601 Formats
Date.parse('1997-07-16T19:20:30+01:00') // ISO 8601 with Timezone offset
편집 : 정규식 버전
x = "2011-01-28T19:30:00EST"
MM = ["January", "February","March","April","May","June","July","August","September","October","November", "December"]
xx = x.replace(
/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):\d{2}(\w{3})/,
function($0,$1,$2,$3,$4,$5,$6){
return MM[$2-1]+" "+$3+", "+$1+" - "+$4%12+":"+$5+(+$4>12?"PM":"AM")+" "+$6
}
)
결과
January 28, 2011 - 7:30PM EST
Edit2 : 시간대를 EST로 변경했고 이제 다음을 얻었습니다.
x = "2011-01-28T19:30:00-05:00"
MM = {Jan:"January", Feb:"February", Mar:"March", Apr:"April", May:"May", Jun:"June", Jul:"July", Aug:"August", Sep:"September", Oct:"October", Nov:"November", Dec:"December"}
xx = String(new Date(x)).replace(
/\w{3} (\w{3}) (\d{2}) (\d{4}) (\d{2}):(\d{2}):[^(]+\(([A-Z]{3})\)/,
function($0,$1,$2,$3,$4,$5,$6){
return MM[$1]+" "+$2+", "+$3+" - "+$4%12+":"+$5+(+$4>12?"PM":"AM")+" "+$6
}
)
반환
January 28, 2011 - 7:30PM EST
원래
String(new Date(x))
반환
Fri Jan 28 2011 19:30:00 GMT-0500 (EST)
위의 문자열을 필요한 형식으로 변환하는 정규식 부분.
January 28, 2011 - 7:30PM EST
Date 객체는 8601을 첫 번째 매개 변수로 처리합니다.
var d = new Date("2014-04-07T13:58:10.104Z");
console.log(d.toString());
단순하게 유지하려면 다음으로 충분합니다.
function parseIsoDatetime(dtstr) {
var dt = dtstr.split(/[: T-]/).map(parseFloat);
return new Date(dt[0], dt[1] - 1, dt[2], dt[3] || 0, dt[4] || 0, dt[5] || 0, 0);
}
노트 에서는 parseFloat가 필수입니다,으로 parseInt 항상 작동하지 않습니다. 지도에는 IE9 이상이 필요합니다.
형식에서 작동 :
- 2014-12-28 15:30:30
- 2014-12-28T15 : 30 : 30
- 2014-12-28
시간대에는 유효하지 않습니다. 다른 답변을 참조하세요.
아마도, 내 의견으로는 클라이언트 측에서 날짜를 구문 분석, 형식화 및 작업하는 데 가장 적합한 JavaScript 라이브러리 인 moment.js를 사용할 수 있습니다. 다음과 같이 사용할 수 있습니다.
var momentDate = moment('1890-09-30T23:59:59+01:16:20', 'YYYY-MM-DDTHH:mm:ss+-HH:mm:ss');
var jsDate = momentDate.toDate();
// Now, you can run any JavaScript Date method
jsDate.toLocaleString();
moment.js와 같은 라이브러리 사용의 장점은 IE 8+와 같은 레거시 브라우저에서도 코드가 완벽하게 작동한다는 것입니다.
다음은 구문 분석 방법에 대한 문서입니다. https://momentjs.com/docs/#/parsing/
MSDN 에 따르면 JavaScript Date 개체는 특정 날짜 형식 지정 방법을 제공하지 않습니다 (다른 프로그래밍 언어에서 볼 수 있음). 그러나 몇 가지 Date
방법과 서식을 사용하여 목표를 달성 할 수 있습니다.
function dateToString (date) {
// Use an array to format the month numbers
var months = [
"January",
"February",
"March",
...
];
// Use an object to format the timezone identifiers
var timeZones = {
"360": "EST",
...
};
var month = months[date.getMonth()];
var day = date.getDate();
var year = date.getFullYear();
var hours = date.getHours();
var minutes = date.getMinutes();
var time = (hours > 11 ? (hours - 11) : (hours + 1)) + ":" + minutes + (hours > 11 ? "PM" : "AM");
var timezone = timeZones[date.getTimezoneOffset()];
// Returns formatted date as string (e.g. January 28, 2011 - 7:30PM EST)
return month + " " + day + ", " + year + " - " + time + " " + timezone;
}
var date = new Date("2011-01-28T19:30:00-05:00");
alert(dateToString(date));
한 단계 더 나아가 Date.toString()
메서드를 재정의 할 수도 있습니다 .
function dateToString () { // No date argument this time
// Use an array to format the month numbers
var months = [
"January",
"February",
"March",
...
];
// Use an object to format the timezone identifiers
var timeZones = {
"360": "EST",
...
};
var month = months[*this*.getMonth()];
var day = *this*.getDate();
var year = *this*.getFullYear();
var hours = *this*.getHours();
var minutes = *this*.getMinutes();
var time = (hours > 11 ? (hours - 11) : (hours + 1)) + ":" + minutes + (hours > 11 ? "PM" : "AM");
var timezone = timeZones[*this*.getTimezoneOffset()];
// Returns formatted date as string (e.g. January 28, 2011 - 7:30PM EST)
return month + " " + day + ", " + year + " - " + time + " " + timezone;
}
var date = new Date("2011-01-28T19:30:00-05:00");
Date.prototype.toString = dateToString;
alert(date.toString());
ReferenceURL : https://stackoverflow.com/questions/4829569/parsing-iso-8601-date-in-javascript
'programing' 카테고리의 다른 글
동일한 모델에서 여러 연결이있는 Rails Polymorphic Association (0) | 2021.01.18 |
---|---|
두 개의 IEnumerable을 동시에 반복하는 방법은 무엇입니까? (0) | 2021.01.18 |
번 들러가 Rubygems 1.5.0으로 업그레이드 한 후 초기화되지 않은 상수 Gem :: SilentUI (NameError) 오류를 발생시킵니다. (0) | 2021.01.18 |
Oracle에서 개행 문자를 입력하는 방법은 무엇입니까? (0) | 2021.01.18 |
Doctrine 2 DQL에서 now ()를 어떻게 사용할 수 있습니까? (0) | 2021.01.18 |