2012-06-25 5 views
6

나는 firefox scratchpad에서 다음 코드를 테스트하여 흥미로운 결과를 얻었습니까?Javascript 새 날짜가 다른 날짜 스타일을 다르게 처리합니까?

var date=new Date("2012-05-12"); 
var date2 = new Date("05/12/2012"); 
date; 
/* 
Fri May 11 2012 17:00:00 GMT-0700 (Pacific Daylight Time) 
*/ 
date2; 
/* 
Sat May 12 2012 00:00:00 GMT-0700 (Pacific Daylight Time) 
*/ 

두 날짜가 다릅니다. 분명히 이것은 시간대 문제 때문입니다. 내가 원하는 것은 date2 결과입니다. js 엔진이 ISO 날짜 스타일을 올바르게 처리하도록하려면 어떻게해야합니까?

+0

첫 번째 예에서 앞에 오는 0을 제거하십시오. 'var date = new Date ("2012-05-12");' – j08691

+0

@ j08691 Firefox에서 적어도 "잘못된 날짜"오류가 발생합니다. – Pointy

+0

@Pointy - Chrome에서 테스트 해 보았습니다. – j08691

답변

2

"2012-05-12"는 ISO 8601 날짜로, "05/12/2012"는 RFC 2822 날짜로 간주됩니다. ISO 형식에서 표준 시간대가없는 것은 UTC를 의미합니다. 5 월 12 일 아침에 자정에 캘리포니아에서 (또는 당신이 어디에 있든) 전날 저녁 7시입니다.

그러나 표준 시간대가없는 RFC 날짜는 로컬 시간대의 자정에 대한 타임 스탬프를 사용한다는 가정하에 구문 분석됩니다. (글쎄, 반드시 당신의 시간대, 자바 스크립트는 Date.parse()에 그 문자열을 전달하면 :-)

당신은 차이를 볼 수 있습니다 실행하는 컴퓨터의 시간대.

RFC 날짜 형식에는 명시 적 표준 시간대가 포함될 수 있지만 ISO 형식은 사용할 수 없습니다. (음,하지만 브라우저 관심을 지불하지 않는 수 있고, 분명히 IE는 모든 사람들을 처리하지 않습니다.)

편집 — 여기에 간단 (바보, 오류는 확인하지 않음) 당신에게 줄 것이다 기능을 그 세 부분으로 ISO 양식에서 날짜 : 표준으로

function isoDate(str) { 
    var rv = null; 
    str.replace(/^(\d\d\d\d)-(\d\d)-(\d\d)$/, function(_, yr, mn, dy) { 
    rv = new Date(parseInt(yr, 10), parseInt(mn, 10) - 1, parseInt(dy, 10)); 
    }); 
    return rv; 
} 
+0

네가 대답하는 것은 실제로 내가 생각하는 것입니다. 하지만 모든 해결책은 ...? – NSF

+0

@NSF ISO 데이터 형식을 직접 구문 분석 한 다음 날짜를 명시 적으로 구성 할 수 있습니다. 숫자로 날짜를 구성하는 경우 현지 시간대를 가정해야합니다. – Pointy

0

, Date()와 함께, 당신은 구현 의존적으로, 구현에 의존하는 형식으로 ISO 날짜 또는 날짜를 구문 분석 할 수 있습니다. 좀 더 안정적인 것을 얻으려면 몇 가지 알려진 형식으로 날짜를 구문 분석 할 수있는 적절한 라이브러리를 사용하십시오.

관련 문제