문자열을 Date 객체로 변환하려고하는데 12 월 31 일을 제외한 모든 날에 작동합니다. 객체별로 31 일 대신 12 월 1 일이 표시됩니다. 나는 이유를 모른다. 내 JavaScript
코드 는 다음과 같습니다 .
var dt = new Date();
dt.setDate("31");
dt.setMonth("11");
dt.setFullYear("2014");
하지만 내 변수 값은 다음과 같습니다.
Mon Dec 01 2014 11:48:08 GMT+0100 (Paris, Madrid)
다른 날짜에 대해 동일한 작업을 수행하면 개체가 적절한 값으로 돌아갑니다. 내가 뭘 잘못했는지 알아?
답변
: ( 31 일 미만의 개월 동안 안전하지 않음 )setMonth
전에해야 setDate
var dt = new Date();
dt.setFullYear(2014);
dt.setMonth(11);
dt.setDate(31);
그리고 setMonth
의 두 번째 매개 변수를 사용하여 날짜를 설정할 수도 있습니다.
var dt = new Date();
dt.setFullYear(2014);
dt.setMonth(11, 31);
생성자에 대한 인수가 제공되지 않으면 시스템 설정에 따라 현재 날짜와 시간 이 사용됩니다 .
따라서 setMonth
및 setDate
별도로 사용하면 여전히 예기치 않은 결과가 발생할 수 있습니다.
설정된 값이 논리 범위보다 크면 값이 인접한 값 으로 자동 조정됩니다 .
예를 들어 오늘이 2014-09-30
이면
var dt = new Date();
dt.setFullYear(2014); /* Sep 30 2014 */
dt.setMonth(1); /* Mar 02 2014, see, here the auto adjustment occurs! */
dt.setDate(28); /* Mar 28 2014 */
이를 방지하려면 생성자를 직접 사용하여 값을 설정하십시오.
var dt = new Date(2014, 11, 31);
답변
요일을 먼저 설정하면 여전히 이번 달이므로 9 월입니다. 9 월은 30 일 밖에 없습니다.
var dt = new Date(); /* today */
dt.setDate("31"); /* 1st Oct 2014 as should be by spec */
dt.setMonth("11"); /* 1st Dec 2014 */
dt.setFullYear("2014"); /* 1st Dec 2014 */
답변
당신이 가장 먼저하는 일은
dt.setDate(31)
이것은 현재 날짜를 31로 설정합니다. 이번 달은 30 일이있는 9 월이므로 반올림합니다.
이 시점 이후에 날짜를 인쇄하면 10 월 1 일이됩니다.
답변
귀하의 의도가 연도, 월 및 날짜를 동시에 설정하는 것이라고 가정하면 더 긴 날짜 생성자를 사용할 수 있습니다 .
새로운 날짜 (년, 월, 일,시, 분, 초, 밀리 초);
[…]
두 개 이상의 인수가 제공되면 누락 된 인수는 1 (일이 누락 된 경우) 또는 다른 모든 인수에 대해 0으로 설정됩니다.
따라서 다음과 같이 작성합니다.
var dt = new Date(2014, 11, 31);
이미 설정 한대로 날짜의 한 부분을 한 번에 설정하면 오버플로가 발생할 수 있습니다.
var dt = new Date(2012, 1, 29); // Feb 29 2012
dt.setFullYear(2014); // Mar 01 2014 instead of Feb 28 2014
또한 날짜 전 달을 설정하면 예상치 못한 오버플로가 발생할 수 있습니다 (방법 순서 변경을 권장하는 답변이 올바르지 않음).
var dt = new Date(2014, 0, 31); // Jan 31 2014
dt.setFullYear(2014); // Jan 31 2014
dt.setMonth(1); // Mar 03 2014 instead of Feb 28 2014
dt.setDate(1); // Mar 01 2014
답변
행동의 이유와 그것을 피하는 방법이 충분히 설명되었습니다.
그러나 코드의 실제 오류는 기본 생성자 인 new Date ()를 사용해서는 안된다는 것입니다. 코드는 현재 시간과 함께 12 월 13 일에 날짜가됩니다. 나는 이것이 당신이 원하는 것인지 의심합니다. 연, 월, 일을 매개 변수로 사용하는 Date 생성자를 사용해야합니다.
답변
날짜 설정의 올바른 순서는 다음과 같습니다.
- setFullYear ()
- setMonth ()
- setDate ()
윤년의 2 월 29 일 때문에 처음에 연도를 설정하는 것도 중요하다는 점을 지적하고 싶습니다.
답변
var dt = new Date();
dt.setFullYear(2014);
dt.setMonth(11);
dt.setDate(31);
문자열이 아닌 정수로 값을 전달합니다. 올바른 값을 반환합니다 ..
업데이트 -위의 설명이 맞지 않습니다 .. 주된 문제는이 세 줄을 올바른 순서로 넣어야한다는 것이 었습니다 .. 시퀀스를 수정 한 후에도 설명을 수정하는 것을 잊었습니다 .. : P