Loading

월을 더하여 종료 일자를 구하는 여러 가지 수식

게시 일자: Oct 13, 2022
상세 설명

종료 일자를 계산하기 위해서 시작 일자에 몇 개월(기간)을 더하는 작업은 아주 간단해 보이지만, 실제로 한 달의 길이는 28, 29, 30, 31일이므로 "월"이 며칠이어야 하는지에 대해서는 다양한 해석과 비즈니스적 요구가 존재합니다.

또한 다음과 같이 추가로 고려할 사항과 문제도 존재합니다.

  • 종료 연도를 올바르게 계산하기
  • 윤년 처리하기
  • 2월 30일, 4월 31일 등 존재하지 않는 날짜를 제외하기

아래의 내용은 시작 일자에 "월"을 더하여 종료 일자를 구하는 다양한 방법을 보여주는 몇 가지 수식 필드 솔루션입니다.
  1. 종료 일자는 시작 일자의 날짜를 사용하되, 일수가 짧은 월의 마지막 날로 제한하기
  2. 월을 고정된 일수(28일, 30일, 31일 등)로 계산하기
  3. 종료 일자를 매달 정해진 특정 일자(예: 1일, 15일 등)로 지정하기
  4. 종료 일자는 시작 일자의 날짜를 사용하지만, 일수가 짧은 월에는 존재하지 않는 날짜를 피하기 위해서 필요에 따라 다음 달의 첫째 날로 넘기기

각각의 수식 필드 예시는 아래의 입력 필드를 사용합니다(각각을 실제 필드 이름으로 변경할 것).
  • Start Date (Start_Date__c): date
  • Months (Months__c): number, 0

여기 제시된 수식을 구현하는 요령:
  • 실제 필드 API 이름으로 대체합니다.
  • 모든 수식 필드 아래에서 "Treat blank fields as blanks(모든 빈 필드를 공백으로 취급)"를 선택합니다.
  • 기간/월이 숫자 값의 선택 목록 필드일 경우, 이를 수식에서 VALUE( TEXT( Picklist_Field_API_Name ))로 참조하세요.
  • 옵션: 실제 날짜 데이터 필드에 대한 프로세스 빌더 필드 업데이트를 구현하여, 계산 후 종료 일자를 직접 편집할 수 있게 하거나 수식 필드 문자 제한을 초과하지 않게 합니다.

 

 

솔루션
방법 1: 시작 일자의 날짜를 사용하되, 일수가 짧은 월의 마지막 날로 제한하기

이 경우에는 ADDMONTHS() 함수를 사용하면 됩니다.

수식 필드(날짜): "End Date(종료 일자)"를 만듭니다.

설명: "Add number of calendar months, but restrict to last day of short months as needed(개월 수를 더하되 필요에 따라 일수가 짧은 달의 마지막 날로 제한)"

도움말 텍스트: "Start Date + Months restricted to last day of short months as needed(시작 일자 + 개월 수가 필요에 따라 기간이 짧은 달의 마지막 날로 제한됨)"

Formula(수식):
IF( ISBLANK( Start_Date__c ) 
|| ISBLANK( Months__c ) , 
NULL , 

ADDMONTHS( Start_Date__c , Months__c )
)


방법 2: 월을 고정된 일수(28일, 30일, 31일 등)로 계산하기
참고: 28 이외의 숫자를 사용하려면 공식에서 28 대신 원하는 숫자를 사용하면 됩니다.

수식 필드(날짜): "End Date(종료 일자)"를 만듭니다.

도움말 텍스트: "Months are 28-day periods(한 달을 28일로)"

Formula(수식): 
IF( ISBLANK( Start_Date__c ) 
|| ISBLANK( Months__c ) , 
NULL , 

/* 시작 일자에 지정된 28일 동안의 개월 수를 더하기 */
Start_Date__c + ( Months__c * 28 )
)


방법 3: 모든 종료 일자를 매달 정해진 특정 일자(예: 1일, 15일 등)로 지정하기

참고: 종료 일자를 항상 특정 일자로 지정하려면 28보다 큰 숫자를 선택하지 마세요. 그러면 기간이 짧은 달에 대한 날짜가 유효하지 않게 됩니다.

수식 필드(날짜): "End Date(종료 일자)"를 만듭니다.

설명: "Mathematically determine end year & month, but use fixed company standard day of month for all End Dates(종료 연도 및 월을 수학적 방식으로 구하되 모든 종료 일자에 대해 고정된 회사 표준 날짜를 사용합니다)."

도움말 텍스트: "End Date is always on the 15th of its month(종료 일자는 항상 해당 월의 15일)"

Formula(수식):
IF( ISBLANK( Start_Date__c ) 
|| ISBLANK( Months__c ) , 
NULL , 

/* 종료 일자 계산 */
DATE(

/* 종료 일자의 연도 계산 */ 
YEAR( ADDMONTHS( Start_Date__c , Months__c )) ,

/* 종료 일자의 월 번호 계산 */ 
MONTH( ADDMONTHS( Start_Date__c , Months__c )) ,

/* 종료 일자 설정 */
15 )  /* 고정된 회사 표준 종료 일자의 날짜 */    원하는 날짜에 대체
)


방법 4: 시작 일자의 날짜를 사용하고 일수가 짧은 달의 유효하지 않은 날짜는 다음 달 1일로 넘기기(예: 4월 31일을 5월 1일로 변경)

숨겨진 수식 필드를 만들어서 원래의 수식 필드를 더 쉽게 읽고, 만들고, 수정하고, 이해할 수 있게 합니다. 참고: 이 방식에서는 3개의 수식 필드를 만들어야 합니다.


1) 숨겨진 수식 필드(숫자, 0): "End Year(종료 연도)" 만들기

설명: "This hidden field will be referenced in End Date formula field(이 숨겨진 필드는 종료 일자 수식 필드에서 참조됨)."

Formula(수식):
IF( ISBLANK( Start_Date__c )
|| ISBLANK( Months__c ) ,
NULL ,

/* 종료 일자의 연도 계산 */
YEAR( ADDMONTHS( Start_Date__c , Months__c ))
)


2) 숨겨진 수식 필드(숫자, 0): "End Month(종료 월)" 만들기

설명: "This hidden field will be referenced in End Date formula field(이 숨겨진 필드는 종료 일자 수식 필드에서 참조됨)."

Formula(수식):
IF( ISBLANK( Start_Date__c )
|| ISBLANK( Months__c ) ,
NULL ,

/* 종료 일자의 월 번호 계산 */
MONTH( ADDMONTHS( Start_Date__c , Months__c ))
)


3) 수식 필드(날짜): "End Date(종료 일자)"를 만듭니다.

설명/도움말 텍스트: "Start Date + Months on same day of the month unless beyond the end of a short month, then the 1st of the next month(시작일 + 월이 일수가 짧은 월의 마지막 날을 넘기지 않을 때는 날짜를 그대로 유지하되, 그렇지 않을 때는 다음 달 1일로 처리)"

Formula(수식):
IF( ISBLANK( Start_Date__c )
|| ISBLANK( Months__c ) ,
NULL ,

/* 일수가 짧은 달의 마지막 날을 넘기는 잘못된 종료 일자가 아닌지 확인하기 */
IF(

/* 윤년 및 윤년이 아닌 해의 2월 종료 일자가 유효하지 않음 */
( End_Month__c = 2
&&
(
( MOD( End_Year__c , 4 ) <> 0  /* 윤년이 아님 */
&& DAY( Start_Date__c ) > 28 )  /* 2월 28일을 넘김 */
||
( DAY( Start_Date__c ) > 29 )  /* 윤년인 2월 29일을 넘김 */
))

|| 
/* 30일의 월과 종료 일자가 31일이 됨  */
(( End_Month__c = 4   /* 4월 */
|| End_Month__c = 6   /* 6월 */
|| End_Month__c = 9   /* 9월 */
|| End_Month__c = 11 ) /* 11월 */
&& DAY( Start_Date__c ) = 31 ) ,

/* 일수가 짧은 월의 잘못된 종료 일자를 사용하지 않도록 다음 달 1일을 사용 */
DATE ( End_Year__c , End_Month__c + 1 , 1 ) ,

/* 혹은 종료 일자가 올바른 날짜일 경우 시작 일자와 동일한 날짜를 사용 */
DATE( End_Year__c , End_Month__c , DAY( Start_Date__c ))
))
Knowledge 기사 번호

000381089

 
로드 중
Salesforce Help | Article