2016-09-01 4 views
1

누군가 내 의견을 javascripts에 업데이트 해 주실 수 있습니까? new Date ('') parse?Javascript date parse why

var _date = new Date('2016-10-15'); 

동일

_date = Fri Oct 14 2016 17:00:00 GMT-0700 (US Mountain Standard Time) {} 

과 동일하지 않은 당신이 moment.js 사용하는 경우

Oct 15 2016 

에 :

var _testdate = moment('2016-10-15').toDate(); 

_testdate = Sat Oct 15 2016 00:00:00 GMT-0700 (US Mountain Standard Time) {} 

예를 들어

, 이유있다

+2

전달한 날짜 문자열은 ISO UTC 날짜로 해석되므로, 앞으로 7 시간입니다. 문자열을 가져 오면 현지 시간으로 완료됩니다. – Pointy

+1

일찍 일어나서 코드를 다시 실행하면 잘 작동합니다. – Pointy

+0

그렇다면 어떻게하면 UTC로 해석되지 않고 순간처럼 작동합니까? 나는 나 자신에게 매우 상대 론적입니다. 나는 당신의 시간이 특히 빛의 속도에 접근하는 나의 시간과 같지 않다는 것을 알고 있지만 나는 당신에 대해 관심이 없다 : P – Watson

답변

3

'2016-10-15'와 같은 날짜 전용 양식은 date 생성자와 Date.parse에 의해 UTC로 취급되기 때문에, moment.js와 같은 라이브러리는 ISO 8601과 일치하고 로컬 .

시스템이 UTC-0700으로 설정되어 있으므로 '2016-10-15'는 2016-10-15T00 : 00 : 00Z (즉, UTC + 0000)로 취급됩니다 (즉, 2016-10-14 17 : 00:00로 설정하십시오.

+0

그리고이 동작을 재정의하기 위해 Date 구문에 전달할 수있는 재정의 함수 나 변수가 없습니다. 날짜 전용 양식이 아니고 날짜 만 양식이되는 그런 식으로 문자열을 형성 할 수 있습니까? – Watson

+0

@ Watson- no와 예. Date 객체는 시간 값 (신기원으로부터의 ms)이며 그 밖의 것은 없습니다. ISO 8601 확장 형식 문자열의 구문 분석은 [* ECMA-262 *] (http://ecma-international.org/ecma-262/7.0/index.html#sec-date.parse)에 지정되어 있습니다. 다른 구문 분석은 구현에 따라 달라 지므로 항상 수동으로 구문 분석을 수행하는 것이 좋습니다 **. 라이브러리를 사용하는 경우 항상 구문 분석 할 형식을 전달하고 절대로 두지 마십시오. – RobG