new Date ()는 Chrome과 Firefox에서 다르게 작동합니다.


94

날짜 문자열을 Date자바 스크립트 로 변환 하려면 다음 코드를 사용하십시오.

var date = new Date('2013-02-27T17:00:00');
alert(date);

'2013-02-27T17:00:00' 서버에서 JSON 개체의 UTC 시간입니다.

그러나 위 코드의 결과는 Firefox와 Chrome에서 다릅니다.

Firefox는 다음을 반환합니다.

Wed Feb 27 2013 17:00:00 GMT+0700 (SE Asia Standard Time)

Chrome은 다음을 반환합니다.

Thu Feb 28 2013 00:00:00 GMT+0700 (SE Asia Standard Time) 

1 일이 다르지만 예상되는 올바른 결과는 Chrome의 결과입니다.

데모 코드 : http://jsfiddle.net/xHtqa/2/

둘 다에서 동일한 결과를 얻으려면이 문제를 어떻게 해결할 수 있습니까?


2
같은 컴퓨터에 있습니까?
Aaron Digulla 2013-02-27

4
@Sandeep의 요점은 Chrome이 시간대 오프셋을 추가하는 반면 Firefox는 그렇지 않다는 것입니다
기본 로케일

3
@CuongLe이 질문을 보셨습니까 : stackoverflow.com/questions/9062863/…
기본 로케일

1
그건 Date {Wed Feb 27 2013 17:00:00 GMT+0000 (GMT)}모두 (리눅스)에 나를 위해.
marekful

1
Nitpicker의 코너 : «JSON 형식의 UTC 시간» -JSON 형식? 정확하게 JSON에 대한 일반적인 불만은 날짜 형식을 전혀 정의하지 않는다는 것입니다.
Álvaro González

답변:


66

UTC의 올바른 형식은 다음과 같습니다 2013-02-27T17:00:00Z(Z는 Zulu 시간). Z올바른 UTC datetime 문자열을 얻으려면 존재하지 않는 경우 추가 하십시오.


2
감사. 작동합니다. 그러나 로그가 있습니다. 앞으로 더 이상 사용되지 않을 것입니다 !!!. 어떤 아이디어라도주세요.
Débora

1
고마워요.이 문제에 대해 이틀 동안 앉아 있었지만이 게시물은 모든 것을 해결했습니다.
Piyal George

30

예, 안타깝게도 날짜 구문 분석 알고리즘은 구현에 따라 다릅니다. 의 사양에서Date.parse (에서 사용됨 new Date) :

문자열은 문자열의 내용에 따라 현지 시간, UTC 시간 또는 다른 시간대의 시간으로 해석 될 수 있습니다. 이 함수는 먼저 날짜 시간 문자열 형식 ( 15.9.1.15 ) 에서 호출 된 규칙에 따라 문자열의 형식을 구문 분석하려고합니다 . 문자열이 해당 형식을 따르지 않는 경우 함수는 구현 별 휴리스틱 또는 구현 별 날짜 형식으로 대체 될 수 있습니다.

Date생성자 가 (아마도) 현지 시간대를 사용하지 않도록 하려면 시간대 정보와 함께 datetime 문자열을 사용하십시오 (예 :) "2013-02-27T17:00:00Z". 그러나 모든 브라우저에서 신뢰할 수있는 구문 분석을 수행하는 형식을 찾기는 어렵습니다. ISO 형식은 IE <8에서 인식되지 않습니다 ( JavaScript : Date.parse로 ISO-8601 날짜 문자열 구문 분석을 지원하는 브라우저 참조 ). 더 나은 방법은 unix 타임 스탬프 (예 : unix epoch 이후 밀리 초)를 사용하거나 정규 표현식을 사용하여 해당 부분에서 문자열을 분리 한 다음 Date.UTC.


2
그러나 사양 (15.9.1.15)은 실제로 "부재하는 시간대 오프셋의 값은"Z "입니다"라고 말합니다. 따라서 구현에 따라 달라지지 않아야합니다
sinelaw

12
네, 정정합니다. ES5.1 사양실수 인 것 같습니다. 의도는 ISO-8601과 일치하는 것입니다. 여기서 Z 누락은 현지 시간을 의미합니다 (따라서 Chrome은 ES5.1, Firefox 및 IE는 ISO-8601과 일치)
sinelaw

@sinelaw : 그 점을 더 조사해 주셔서 감사합니다. 그러나 사양에 관계없이 [이전] 브라우저는 여전히 다르게 작동합니다. :-)
Bergi

2
이상하게도 Date.Parse 대 new Date를 사용하면 Chrome이 날짜를 이미 현지 시간대로 처리하는 대신 현지 시간대로 변환하는 문제가 해결되었습니다.
KingOfHypocrites

1
@ KingOfHypocrites— 문자열로 Date 생성자 호출하는 것이 Date.parse 를 사용하는 것과 동일해야 하므로 약간 이상 합니다.
RobG

4

여기서 한 가지를 찾았습니다. 기본 Firefox Inspector 콘솔에 버그가있는 것 같습니다. 기본 Inspector에서 "new Date ()"를 실행하면 잘못된 시간대, GMT 로케일로 날짜가 표시되지만 Firebug Extension Console에서 동일한 명령을 실행하면 날짜가 표시됩니다. 표시된 시간대는 올바른 시간대 (GMT-3 : 00)를 사용합니다.


-2

moment.js를 사용해보십시오. 모든 브라우저에서 매우 잘 작동하고 비슷한 방식으로 작동합니다. 많은 서식 옵션이 제공됩니다. New Date ( 'date') 대신 moment ( 'date'). format ( "") 사용


-2

FireFox가 Chrome과 동일한 결과를 반환하지 않는 것으로 나타났습니다. 날짜에 대해 kendo.toString에서 사용하는 형식이 차이를 만드는 것 같습니다.

마지막 콘솔 결과는 내가 필요한 것입니다.

여기에 이미지 설명 입력

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.