Anybody who made a calendar in Flash may have written this code. You may use if or switch statements to get the last day of a month.
달력 같은 걸 만들면서 누구나 한번쯤 만들어 봤을 코드입니다. 지정된 달의 마지막 날을 구하기 위해서 if문이나 아래 코드처럼 switch문을 사용하게 되죠.
カレンダーみたいなものを作って見た方は、このコードを作成したことがあるんですね。普通、月の末日を得るために、if文とかswitch文を使うんです。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function getLastDayOld(day:Date):Date{
 
	var dd:uint = 31;
 
	var yyyy:uint = day.getFullYear();
	var mm:uint = day.getMonth() + 1;
 
	switch(mm){
 
		case 4:
		case 6:
		case 9:
		case 11:
			dd = 30;
		break;
 
		case 2:
			if((yyyy % 4) == 0 || (yyyy % 100) == 0){
				dd = 29;
			}else{
				dd = 28;
			}
		break;
 
	}
 
	var lastDay:Date = new Date(yyyy, (mm-1), dd);
	return lastDay;
 
}
I figured out a more simple solution. Date.setMonth() method simply gets the job done.
그런데 이 문제를 매우 간단히 해결할 수 있는 코드를 생각해 냈습니다. Date.setMonth() 메소드 하나로 쉽게 처리가 되네요.
これをもっと簡単に処理するコードを考えてみました。Date.setMonth()メソッドを使えば、オーケーです。
1
2
3
4
5
function getLastDay(day:Date):Date{
	var lastDay:Date = new Date(day);
	lastDay.setMonth(lastDay.getMonth() + 1, 0);
	return lastDay;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var day:Date = new Date(2008, 0, 15);
for(var i:uint=0; i<12; i++){
	day.setMonth(i, 1);// modified on 2009.10.26
	trace((day.getMonth() + 1), " - ", getLastDay(day).getDate(), " : ", getLastDayOld(day).getDate());
}
/* output
1  -  31  :  31
2  -  29  :  29
3  -  31  :  31
4  -  30  :  30
5  -  31  :  31
6  -  30  :  30
7  -  31  :  31
8  -  31  :  31
9  -  30  :  30
10  -  31  :  31
11  -  30  :  30
12  -  31  :  31*/

  8 Responses to “To get the last day of a month.”

  1. 완전 유용해요!!! 새로운 식의 날짜구하기..ㅎㅎ

  2. 날자 계산이 필요할 때 Date객체를 위 코드와 비슷하게 사용하곤 했었는데, 이런 용도가 있다는 건 생각해보지 못했네요 ㅎㅎ

  3. 오홍~ 신기하네요 +_+
    낼름~ 꿀꺽.

  4. 와~ 간단하군요 ;)

  5. setMonth()나 setDate()의 레퍼런스에는 입력 범위가 0-11, 1-31로 제한되어 있다고 나오지만, 범위 밖의 값을 입력하면 자동으로 차이만큼 계산해서 날짜가 변경이 되더군요. 그래서 0일은 이전달의 마지막 날이 나오는 거고요.

  6. 잘 봤습니다. ^.^
    혹시나 그레고리식 달력 보기 문제가 있나 확인하는데..문제가 있네요
    위 getLastDayOld (1500) 입력식..2월달은 결과가 1이 나옵니다.
    그리고 아래 getLastDay(1598, 2, 30) 넣으면 결과가 1월 2월 3월 몽땅 31일까지 나옵니다.

    • 일 설정에 문제가 있어서 그런것 같네요. 30일로 지정되면서 2월 30일이 3월 2일로 넘어가 버려서, 2월과 3월이 모두 3월의 결과값인 31이 출력되는 문제로 보입니다. 날자를 31일로 지정하면 대부분의 달에서 잘못 게산되는 군요.
      day.setMonth(i, 1); 와 같이 날자를 제한시키면 일이 넘어가는 문제로 인한 오류를 피할 수 있습니다.

    • 1500년 이전에는 윤달이 없는 건가요? 윤달로 인식하여 2월 29일로 날자를 지정하면 3월 1일로 넘어가 버려서 결과값이 1로 나오는 것 같네요. getLastDayOld() 함수에서 1500년 이전인 경우의 윤달 계산 부분에 수정이 필요해 보이는 군요.
      좋은 지적 감사합니다. 미처 생각지 못했던 것을 하나 배웠네요.

 Leave a Reply

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">

   
© 2011 Hangun's World - Blog Suffusion theme by Sayontan Sinha