Date 팁: set 관련 조작 및 응용현재 월 (분기 / 년) 의 마지막 날 가 져 오기

16013 단어

set 작업 은 아직도 적지 않다.http://www.w3school.com.cn/jsref/jsref_obj_date.asp,
오늘 은 그냥... setFullYear, setMonth, setDate, 오늘 의 응용 은 이 세 가지 만 관련 되 기 때 문 입 니 다.
 
이 세 가지 방법 은 말 그대로 년, 월, 일 을 설정 합 니 다. 예전 에 제 가 알 게 된 응용 프로그램 입 니 다. 예 를 들 어 '카운트다운' 에서 목표 시간 대 를 설정 할 때 사 용 됩 니 다. 다른 것 은 잠시 기억 하지 못 하고 나중에 다시 보충 합 니 다.
오늘 은 '현재 월 (분기 / 년) 의 마지막 날 을 얻 기' 의 용법 을 말 합 니 다.
 
매달 일 수 는 정 해 져 서 는 안 된다 는 것 을 생각 하 셨 을 것 입 니 다. 28, 29 (윤년 2 월), 30, 31 이 있 습 니 다. 지금 이 몇 월 인지 계산 한 다음 에 arr 나 map (json) 에 가서 대응 하 는 날 짜 를 찾 아 보 세 요. 물론 이것 도 방법 입 니 다. 효과 가 있 을 수 있 습 니 다. (윤년 도 고려 해 야 합 니 다)
그럼 이렇게 번 거 롭 지 않 으 면 어 떡 하지?
사실 Date 는 원래 윤년 과 같은 특수 한 상황 을 포함 하여 매달 일 수 를 자동 으로 처리 하기 때문에 우 리 는 전혀 관심 을 가 질 필요 가 없다.
여기 서 하나의 용법 을 사용 하 는데 여러분 도 사용 해 보 셨 을 것 입 니 다. date. setDate (0).그래, 잘못 본 게 아니 라 0 이 야.(여보세요, 이 건 month 가 아 닙 니 다. 1 을 추가 하지 않 아 도 됩 니 다. setDate (1) 를 사용 하 는 것 이 확실 합 니까?)
0 은 존재 하지 않 는 날 입 니 다. date. setDate (0) 이후 이 날 은 존재 하지 않 거나 1 일 전날 로 설정 되 어 있 습 니 다.그렇다면 1 일 전날 은 자 연 스 럽 게 전 월 의 마지막 날 이다.
1 var date = new Date();
2 console.log('    ', date.getMonth() + 1, date.getDate());
3 date.setDate(0);
4 console.log('         ', date.getMonth() + 1, date.getDate());

 콘 솔 이 위의 코드 를 뛰 면 지난달 마지막 날 을 얻 을 수 있 을 것 이다.
 
계속 하 세 요. 우리 가 얻 을 수 있 는 것 은 이번 달 마지막 날 입 니 다. 어떻게 깨 뜨 릴 까요?
먼저 월 을 다음 달 로 설정 한 다음 에 이 달의 마지막 날 을 가 져 옵 니 다. 
1 date.setMonth(date.getMonth() + 1);
2 date.setDate(0);

날짜 가 이 달 마지막 날 에 대응 하 는 날짜 대상 입 니 다.
이로써 그 달의 마지막 날 을 간단하게 얻 을 수 있 습 니 다. setMonth 를 바 꾸 면 그 달의 마지막 날 을 얻 을 수 있 습 니 다.
~~~~~~~~~~~~~~~~~~~~~~~~~   분할 선  ~~~~~~~~~~~~~~~~~~~~~~
 
다음은 이 해 의 마지막 날 짜 를 얻 는 날짜 입 니 다.
마찬가지 로 우 리 는 내년 까지 만 설치 하면 된다. 그리고 월 을 0 월 (즉 1 월) 까지 설치 한 다음 에 0 일 까지 설치 하면 2017 - 01 - 00, 즉 설날 전날 이 된다. 물론 2016 - 12 - 31 일이 다.
1 date.setFullYear(date.getFullYear() + 1); //      
2 date.setMonth(0); //    0 ,      1 ,     ,      0
3 date.setDate(0); //    0 

 
~~~~~~~~~~~~~~~~~~~~~~~~~  또 선 을 나 누 자.  ~~~~~~~~~~~~~~~~~~~~~
 
그리고 현재 분기 의 마지막 날 이 왔 다.
Date 에는 분기 개념 이 없습니다.
1 var m = date.getMonth();
2 var quarter = Math.floor(m / 3) + 1; //  1  , 4
3 var qLastMonth = quarter * 3;

그 중에서 quarter 는 몇 분기 이 고 qLast Month 는 이번 분기 의 마지막 달 은 몇 월 입 니까?
이번 분기 의 마지막 달 이 몇 월 인지 받 았 으 니 위 에서 1 월 의 마지막 날 을 얻 는 방법 으로 처리 하면 좋 겠 다.
1 date.setMonth(qLastMonth);
2 date.setDate(0);

이때 데이트 가 현재 분기 의 마지막 날 데이트 대상 이다.물론 확장 을 하면 임의의 분기 의 마지막 날 을 받 을 수 있 습 니 다. 첫 번 째 단계 에 만 설정 하면 됩 니 다.
임의의 분기 의 마지막 날, 예 를 들 어 2 분기, 그냥... 
1 date.setMonth(6); // 4 || 5 || 6   
2 date.setDate(0);

 
 
마지막 으로 프로젝트 에서 만난 실제 응용 에서
자줏빛
1. 이번 분기 의 마지막 날 획득 하기;오늘 이 현재 분기 의 마지막 날 이 15 일 보다 클 때 (예 를 들 어 6 월 20 일) 다음 분기 의 마지막 날 로 돌아간다.
2. 올해 의 마지막 날 획득 하기;오늘 이 12 월 15 일 보다 크 면 내년 의 마지막 날 로 돌아간다.
 
시 작 된 구현 코드 는 다음 과 같 습 니 다.
 1 /**
 2  *       /   /           date  
 3  * @param  {String} type     : month/m, year/y, quarter/q
 4  * @return {object}           date  ,       
 5  */
 6 
 7 var SERVER_TIME = Date.now() / 1000; //
 8 
 9 function getMaxDate(type) {
10     var date = new Date(SERVER_TIME * 1000);
11     var m = date.getMonth();
12     var y = date.getFullYear();
13     var d = date.getDay();
14     var today = date.getDate();
15     console.log(['SERVERTIME: ',y,'-',m+1,'-',today,'   ',d].join(''));
16     switch (type) {
17         case 'm':
18         case 'month':
19             date.setMonth(m + 1);
20             date.setDate(0);
21             break;
22         case 'y':
23         case 'year':
24             if (m == 11 && today >= 15) {
25                 date.setFullYear(y + 2);
26             } else {
27                 date.setFullYear(y + 1);
28             }
29             date.setMonth(0);
30             date.setDate(0);
31             break;
32         case 'q':
33         case 'quarter':
34             var qLastMonth = (Math.floor(m / 3) + 1) * 3;
35             date.setMonth(qLastMonth);
36             date.setDate(0);
37 
38             if (m === date.getMonth() && today >= 15) {
39                 date.setMonth(qLastMonth + 3);
40                 date.setDate(0);
41             }
42             break;
43         default:
44             date = null;
45     }
46 
47     return date;
48 }

 
그리고 이 코드 에 큰 구멍 이 있어 서 평소에 만 날 수 있 는 것 이 아니 라 연말 이 되 지 않 았 습 니까? 바로 나 왔 습 니 다.
분기 선택 시 36 줄 또는 뒤쪽 38 줄 의 코드 블록 에 문제 가 발생 합 니 다.
예 를 들 어 2 분기 에는 문제 가 없다.36 줄 에 날짜 의 날 부터 30 일, 즉 6 월 30 일 까지 설정 합 니 다.38 줄 코드 논 리 를 만족 시 키 면 39 - 40 줄 설정 월 부터 9 월 30 일 까지 괜 찮 습 니 다. 완벽 합 니 다 ~
 
그러나 지금 이 1 분기 라면 36 줄 의 설치 날 짜 는 3 월 31 일 까지 이다.38 줄 코드 논 리 를 충족 시 키 면 39 - 40 줄 은 6 월 31 일 까지, 아시 바, 6 월 31 일이 없 으 면 이때 얻 은 날짜 가 ~ ~ ~ 맞 아, 7 월 1 일 에 스스로 구 덩이 를 파 는 거 야.
 
그래서 코드 를 바 꿨 어 요.
 1 function getMaxDate(type) {
 2     var date = new Date(SERVER_TIME * 1000);
 3     var m = date.getMonth();
 4     var y = date.getFullYear();
 5     var d = date.getDay();
 6     var today = date.getDate();
 7     console.log(['SERVERTIME: ', y, '-', m + 1, '-', today, '   ', d].join(''));
 8     switch (type) {
 9         case 'm':
10         case 'month':
11             date.setMonth(m + 1);
12             date.setDate(0);
13             break;
14         case 'y':
15         case 'year':
16             if (m == 11 && today >= 15) {
17                 date.setFullYear(y + 2);
18             } else {
19                 date.setFullYear(y + 1);
20             }
21             date.setMonth(0);
22             date.setDate(0);
23             break;
24         case 'q':
25         case 'quarter':
26             var qLastMonth = (Math.floor(m / 3) + 1) * 3;
27             if (m === date.getMonth() && today >= 15) {
28                 date.setMonth(qLastMonth + 3);
29             } else {
30                 date.setMonth(qLastMonth);
31             }
32             date.setDate(0); //            date
33             break;
34         default:
35             date = null;
36     }
37 
38     return date;
39 }

 
 여기 서 주의 항목 을 얻 었 습 니 다. 달의 관련 판단 은 반드시 일의 설정 전에 잘 해 야 합 니 다. 날짜 설정 후 달 을 조작 하지 마 십시오.또는 날 짜 를 1 - 28 사이 의 임의의 숫자 로 설정 하면 다음 달 까지 가지 않 을 것 을 보증 합 니 다.
 
bla ~ bla ~ 말 을 잔뜩 했 어 요. 쓸데없는 말 을 많이 했 어 요. 어차피 센 스 있 게 썼 으 니까 한 번 만 기록 해 주세요 ~ ~
 
see U
 
다음으로 전송:https://www.cnblogs.com/ufex/p/get_last_day.html

좋은 웹페이지 즐겨찾기