2017-03-27 6 views
-1

많은 "날짜"를 처리해야하는 프로젝트를 진행하고 있습니다. 가끔 자바 스크립트는 다른 브라우저에서 다르게 동작하는 것을 알 수 :자바 스크립트가 다른 브라우저에서 다르게 작동합니다.

코드 :

new Date("Mar 30, 2017".replace(',', '').replace(/ /g, '/')) 

내가 날짜를 만들 replace를 사용하지 않아도 알고 있지만,이 코드는 나에게 크롬과 사파리에서 흥미로운 다른 결과를 제공합니다 .

나는 실행하는 동안 :

"Mar 30, 2017".replace(',', '').replace(/ /g, '/') 

크롬과 사파리 것 모두 저를 제공합니다 "Mar/30/2017". 나는 Date 객체로 결과를 설정하려고 할 때, 흥미로운 결과가 될 것입니다 : 이미 두 브라우저의 자바 스크립트 버전을 확인하신 후, 그들은 동일한 버전 (1.7)을 사용하는

Chrome: Thu Mar 30 2017 00:00:00 GMT-0700 (PDT) 
Firefox: Date 2017-03-30T07:00:00.000Z 
Safari: Invalid Date 

. 누구든지 Chrome이 Safari와 다르게 동작하는 이유를 설명 할 수 있습니까?

업데이트 "Mar/30/2017"은 유효한 날짜 형식이 아닙니다. 하지만 내 질문은 다른 브라우저에서 javacript가 다르게 동작하는 이유 그 답변에 대한 내 날짜 형식에 대한 불평. 대답하기 전에 질문을 읽어보십시오. 나는 @ Felix Kling의 대답을 취할 것이고, 모든 대답에 모두 감사 할 것이다.

+1

예, 비표준 날짜 형식을'new Date()'에 전달하면 다양한 결과가 나타납니다. 가능한 경우 [표준 형식] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) 만 전달하거나 문자열을 모두 전달하지 마십시오. – JJJ

+0

Safari의 JS 구현에서 이해할 수 없을 수도 있습니다. 왜 "Mar/30/2017"로 날짜를 만들어야합니다. 첫 번째 방법은 잘 작동해야합니다. [w3 date docs] (https://www.w3schools.com) /jsref/jsref_obj_date.asp) –

+2

''Mar/30/2017 ''은 내가 아는 사양에 따라 유효한 날짜 형식이 아니기 때문에. 브라우저는 여기에서 볼 수 있듯이 원하는 방식으로 해석 할 수도 있고 전혀 해석하지 않을 수도 있습니다. – Timo

답변

0

왜 Chrome이 Safari와 다른 점이 있는지 설명 할 수 있습니까?

specification 알 수없는 날짜 형식을 처리하는 구현에 의존는 말한다 :

[...] 문자열은 현지 시간으로하는 UTC 시간 또는 다른 시간의 시간으로 해석 할 수있다 영역, 문자열의 내용에 따라. 이 함수는 먼저 Date Time String Format (20.3.1.16)에서 호출 된 규칙 (확장 된 연도 포함)에 따라 String의 형식을 구문 분석하려고합니다. 캐릭터 라인이 그 형식에 준거하고 있지 않는 경우, 함수는 임의의 구현 고유의 휴리스틱 또는 구현 고유의 일자 포맷으로 폴트 할 수 있습니다. [...]

Safari와 Chrome은 다른 JavaScript 엔진을 사용하므로이 경우 동작이 달라질 수 있습니다.