2011-03-31 3 views
4

문자열에서 날짜를 가져와 구문 분석하여 날짜, 월 및 연도 구성 요소를 가져 와서 Date 객체를 인스턴스로 사용합니다.잘못된 날짜를 반환하는 JavaScript setDate

내가 달성하고자하는 것은 하루로 날짜를 증가시키는 것입니다. setDate 메서드가 잘못된 날짜를 반환하는 경우를 제외하고는 모두 잘 작동합니다 ...

예를 들어, 2011 년 2 월 28 일에 1 일을 추가하면 2011 년 2 월 29 일 ... 날짜가 반환됩니다. 실제로 존재하지 않습니다.

JavaScript의 기본 날짜/시간 API의 버그/제한 사항입니까? 아니면 잘못된 것입니까? 나는 날짜의 유효성을 확인하지 않고 그런 식으로 행동한다고 ​​믿기가 어렵다.

var myDate = new Date(2011, 2, 28); 
alert(myDate); 
myDate.setDate(myDate.getDate() + 1); 
alert(myDate); // 29 February 2011 ! 

감사합니다.

답변

10

당신 월에없는 - 달 # 2

JS 달을 기준으로 0 인 월

입니다

var myDate = new Date(2011, 1, 28); // 28th of Feb 
alert(myDate); 
myDate.setDate(myDate.getDate() + 1); 
alert(myDate); // 1st of March 2011 ! 

PS : 당신은 몇 가지 문제가있을 수 있습니다 어디 날짜를 만드는 경우 일광 절약 시간에 걸쳐 있습니다 var d = new Date()을 사용하고 이후에 d.setHours(0,0,0,0)을 수행하여 정상화하지 마십시오.

+0

, 덕분에 많이 시도이다. 나는 .NET 배경에서오고 DateTime 객체는 거기에서 그런 식으로 행동하지 않는다. 나는 틀린 일을하고 있다고 의심했다 ... 나는이 행동을 매우 직관적이라고 생각할 수 없다. 비록 대부분의 것들 in 프로그래밍은 0 기반입니다. –

+0

년과 날 부분이 0 기반으로 보이지 않는 것이 더 직관적이 아닙니다. –

+0

@Kharlos - 주 숫자도 0 기준입니다 - 0 = 일요일 - 그 중 하나 - 자세한 정보는 다음과 같습니다 : [이유 자바 캘린더의 1 월 월 0?] (http://stackoverflow.com/questions/344380/why-is-january-month-0-in-java-calendar) – mplungjan

1

아니요, 3 월을 사용하고 계십니까? 3 월 29 일이 존재합니다.

var myDate = new Date(2011, 1, 28); // 28th of february 
1

당신은 0에서 var에 MyDate가 = 새로운 날짜 (2011, 2, 28) 개월 수를 계산 것을 잊었다; 실제로 월 2011년 3월 28일 0시 0 분 0 초 GMT + 0300 (FLE 일광 시간) {}

지금 볼
var myDate = new Date(2011, 1, 28); 
alert(myDate); 
myDate.setDate(myDate.getDate() + 1); 
alert(myDate); // 1 Mar 2011 ! 
관련 문제