[javascript] Javascript 날짜 개체가 항상 하루입니까?

Java Script 앱에서 날짜는 다음과 같은 형식으로 저장됩니다.

2011-09-24

이제 위의 값을 사용하여 새 Date 객체를 만들려고하면 (다른 형식으로 날짜를 검색 할 수 있음) 날짜는 항상 하루가 지났습니다. 아래를보십시오 :

var doo = new Date("2011-09-24");
console.log(doo);

로그 :

Fri Sep 23 2011 20:00:00 GMT-0400 (Eastern Daylight Time)



답변

동부 일광 절약 시간은 동부 표준시 기준이며 -4 hours돌아 오는 날짜의 시간은 20입니다.

20h + 4h = 24h

2011-09-24의 자정입니다. 시간대 표시기가없는 날짜 전용 문자열을 제공했기 때문에 날짜가 UTC (GMT) 로 구문 분석 되었습니다. 대신 표시기없이 날짜 / 시간 문자열을 제공 한 경우 ( new Date("2011-09-24T00:00:00")) 현지 시간대로 구문 분석 된 것입니다. (역사적으로 사양이 두 번 이상 변경 되었기 때문에 불일치가 있었지만 최신 브라우저는 괜찮거나 항상 시간대 표시기를 포함 할 수 있습니다.)

올바른 날짜를 얻었으므로 올바른 시간대를 지정하지 않았습니다.

날짜 값에 액세스 해야하는 경우 getUTCDate()또는 다른 getUTC*()기능을 사용할 수 있습니다 .

var d,
    days;
d = new Date('2011-09-24');
days = ['Sun', 'Mon', 'Tues', 'Wed', 'Thurs', 'Fri', 'Sat'];
console.log(days[d.getUTCDay()]);


답변

있다 몇몇 미친 JS에 일어날 일 날짜 로 변환 문자열, 예를 들어 사용자가 제공 한 다음 날짜를 고려하는 것이 목적

참고 : 다음 예제 또는하지 않을 수 있습니다 OFF ONE DAY 에 따라 당신의 시간대와 현재 시간.

new Date("2011-09-24"); // Year-Month-Day
// => Fri Sep 23 2011 17:00:00 GMT-0700 (MST) - ONE DAY OFF.

그러나 문자열 형식을 Month-Day-Year 로 재 배열하면 …

new Date("09-24-2011");
=> // Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.

또 다른 이상한 것

new Date("2011-09-24");
// => Fri Sep 23 2011 17:00:00 GMT-0700 (MST) - ONE DAY OFF AS BEFORE.

new Date("2011/09/24"); // change from "-" to "/".
=> // Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.

새로운 날짜를 만들 때 날짜 ‘2011-09-24’ 에서 하이픈을 쉽게 변경할 수 있습니다.

new Date("2011-09-24".replace(/-/g, '\/')); // => "2011/09/24".
=> // Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.

“2011-09-24T00 : 00 : 00” 과 같은 날짜 문자열이 있으면 어떻게됩니까?

new Date("2011-09-24T00:00:00");
// => Fri Sep 23 2011 17:00:00 GMT-0700 (MST) - ONE DAY OFF.

이전과 같이 하이픈슬래시 로 변경하십시오 . 무슨 일이야?

new Date("2011/09/24T00:00:00");
// => Invalid Date

나는 일반적으로 날짜 형식 2011-09-24T00 : 00 : 00 을 관리해야 하므로 이것이 내가하는 일입니다.

new Date("2011-09-24T00:00:00".replace(/-/g, '\/').replace(/T.+/, ''));
// => Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.

최신 정보

Date 생성자에 별도의 인수를 제공하면 아래 설명과 같이 다른 유용한 출력을 얻을 수 있습니다

참고 : 인수는 숫자 또는 문자열 유형일 수 있습니다. 값이 혼합 된 예를 보여 드리겠습니다.

주어진 해의 첫 달과 일을 얻으십시오

new Date(2011, 0); // Normal behavior as months in this case are zero based.
=> // Sat Jan 01 2011 00:00:00 GMT-0700 (MST)

마지막 달과 일을 가져옵니다

new Date((2011 + 1), 0, 0); // The second zero roles back one day into the previous month's last day.
=> // Sat Dec 31 2011 00:00:00 GMT-0700 (MST)

숫자, 문자열 인수의 예 0부터 시작하는 달이 다시 표시되므로 월은 3 월입니다.

new Date(2011, "02"); 
=> // Tue Mar 01 2011 00:00:00 GMT-0700 (MST)

우리가 똑같은 일을하지만 제로의 날을 가지면 우리는 다른 것을 얻습니다.

new Date(2011, "02", 0); // again the zero roles back from March to the last day of February.
=> // Mon Feb 28 2011 00:00:00 GMT-0700 (MST)

연도 및 월 인수에 0을 추가하면 이전 달의 마지막 날이 표시됩니다. 음수를 계속하면 하루 더 계속 롤백 할 수 있습니다

new Date(2011, "02", -1);
=> // Sun Feb 27 2011 00:00:00 GMT-0700 (MST)


답변

날짜를 정규화하고 원하지 않는 오프셋을 제거하려면 ( https://jsfiddle.net/7xp1xL5m/ ) :

var doo = new Date("2011-09-24");
console.log(  new Date( doo.getTime() + Math.abs(doo.getTimezoneOffset()*60000) )  );
// Output: Sat Sep 24 2011 00:00:00 GMT-0400 (Eastern Daylight Time)

이것은 또한 @tpartee와 동일하고 신용을 얻습니다 ( https://jsfiddle.net/7xp1xL5m/1/ ).

var doo = new Date("2011-09-24");
console.log( new Date( doo.getTime() - doo.getTimezoneOffset() * -60000 )  );


답변

현지 시간대로 일부 날짜의 시간 0을 얻으려면 개별 날짜 부분을 Date생성자에 전달하십시오 .

new Date(2011,08,24); // month value is 0 based, others are 1 based.


답변

문자열 끝에 공백을 추가하면 UTC가 생성에 사용된다는 것을 추가하고 싶습니다.

new Date("2016-07-06")
> Tue Jul 05 2016 17:00:00 GMT-0700 (Pacific Daylight Time)

new Date("2016-07-06 ")
> Wed Jul 06 2016 00:00:00 GMT-0700 (Pacific Daylight Time)

편집 : 이것은 권장되는 솔루션이 아니며 대안적인 답변입니다. 무슨 일이 일어나고 있는지 명확하지 않기 때문에이 방법을 사용하지 마십시오. 누군가 실수로 버그를 일으켜 리팩터링하는 방법에는 여러 가지가 있습니다.


답변

시간대 조정과 관련이 있다고 생각합니다. 생성 한 날짜는 GMT이고 기본 시간은 자정이지만 시간대는 EDT이므로 4 시간을 뺍니다. 이것을 확인하여보십시오 :

var doo = new Date("2011-09-25 EDT");


답변

문제는 구체적으로 시간대와 관련이 있습니다. 참고 부분 GMT-0400-GMT보다 4 시간 늦습니다. 표시된 날짜 / 시간에 4 시간을 추가하면 정확히 2011/09/24 자정이됩니다. toUTCString()GMT 문자열을 얻으려면 대신 메소드를 사용하십시오 .

var doo = new Date("2011-09-24");
console.log(doo.toUTCString());