본문 바로가기
도구/노션

[노션(Notion)] 날짜와 날짜 사이의 간격을 구해 N년 M개월 형식으로 표현하기

by 은성. 2024. 12. 1.

 

 

예를 들어 노션으로 경력 이력을 정리하거나 장기 프로젝트의 소요 기간을 정리해야 한다면,
시작일과 종료일 간의 간격을 구할 필요가 있다.

 

오늘은 날짜와 날짜 사이의 간격을 구해 N년 M개월 형식으로 표현하는 방법에 대해 다뤄보겠다.

 

 

1. 데이터베이스 생성하기

 

 

정보를 담을 새 데이터베이스를 생성해준다.

한글을 사용한다면 /표 라고 검색했을 때 /표 - 데이터베이스 와 같은 형식으로 뜰 것이다.

 

표가 생성되면 새로운 테이블을 만들어 연결해준다.

 

 

2. 시작일 - 종료일 속성 생성하기

 

테이블의 + 버튼을 눌러 Date(날짜) 속성을 추가해준다.

 

 

각각 Start Date(시작일), End Date(종료일)로 이름을 설정한다.

당연한 얘기지만 속성 이름은 한글로 해도 좋고, 영어로 해도 좋다. (상관 없다.)

 

 

3. 기간을 구하는 수식 추가하기

 

이번에는 Formula(수식) 속성을 추가해주고 이름을 Duration(기간)으로 설정한다.

 

 

dateBetween(date, date, unit)

dateBetween(prop("End Date"), prop("Start Date"), "days")

 

날짜 사이의 간격을 구하는 수식은 dateBetween 이다.

세 번째 파라미터로는 구할 단위를 넘겨주면 되는데, 위 수식에서는 "days"를 넣었기 때문에 일 단위로 계산된다.

 

 

N일 형식으로 표시하기

 

만약 한 가지 단위로만, 예를 들어 일 단위로 N일 형식으로만 표현해주고 싶다면 훨씬 간단하다.

joinformat을 사용해 아래와 같이 써주면 된다.

join([format(dateBetween(prop("End Date"), prop("Start Date"), "days")), "일"], "")
  • join([list], joiner): 리스트를 이어붙인 형태로 표현해준다. 중간에 joiner를 붙여 표시한다. 여기서는 둘 사이에 아무것도 없어야 해서 공백("")을 넣어주었다.
  • format: 숫자 등을 텍스트로 변환한다.
  • (원래 concat을 사용하면 텍스트 이어붙이기가 됐던 것 같은데 버그인지 업데이트인지 리스트로만 작동하고 중간에 쉼표가 들어가서 join을 사용해주었다. 왜 이렇게 됐는지 아는 사람이 있으면 댓글로 제보 바란다..)

 

 

Start Date부터 지금(오늘)까지

위의 예시 데이터에서 End Date를 입력하지 않은 경우, 즉 '지금까지' 다니고 있는 경우를 표현하고 싶다면 어떻게 해야 할까?
(매번 노션에 들어갈 때마다 End Date 속성값을 변경해주면 되겠지만.. 그건 너무 번거롭다.)

 

 

간단하다. if 문으로 End Date 속성이 비어있는지 체크하고, 비어 있다면 now() 를 사용해 현재 날짜를 받아오면 된다.

if(empty(prop("End Date")),
join([format(dateBetween(now(), prop("Start Date"), "days")), "일"],""),
join([format(dateBetween(prop("End Date"), prop("Start Date"), "days")), "일"], ""))
  • if(condition, if True, if False): 조건문, 두 번째 파라미터로 조건문이 참일 때 / 세 번째 파라미터로 조건문이 거짓일 때 반환할 값을 입력해주면 된다.
  • empty: 빈 값인지 체크한다.
  • now(): 현재 날짜/시간을 가져온다.

 

 

2개 이상의 단위로 표현하기: N년 M개월

 

그러면 이제 한 가지 단위가 아니라, N년 M개월 이라는 두 가지 단위로 표현하려면 어떻게 해야하는지 살펴보자.

이론은 동일하다. 다만 수식이 길어질 뿐...

 

if(empty(prop("End Date")),
join([format(dateBetween(now(), prop("Start Date"), "years")), "년 ",
	format(dateBetween(now(), prop("Start Date"), "months")%12), "개월"],""),
join([format(dateBetween(prop("End Date"), prop("Start Date"), "years")), "년 ",
	format(dateBetween(prop("End Date"), prop("Start Date"), "months")%12), "개월"], ""))
  • year값은 dateBetween에서 "years"로 가져오고,
  • month 값은 dateBetween에서 "months"로 가져온 뒤 (연도로 산출된 값을 제외해야 하기 때문에) %를 사용하여 12로 나눈 나머지만을 가져와 사용한다.

 

 

0년, 0개월 안 보이게 하기

 

연도가 없을 때의 '0년', 개월 수가 없을 때의 '0개월'이 보기 싫다면 다음과 같이 하면 된다. (수식이 더 길어진다!)

참고로 0개월일 때에는 일 수를 표시하도록 해두었다. (0일은 0일로 표시됨)

 

if(empty(prop("End Date")),
join([
	if(dateBetween(now(), prop("Start Date"), "years")<=0, "", 
		join([format(dateBetween(now(),prop("Start Date"),"years")),"년 "], "")), 
	if(dateBetween(now(), prop("Start Date"), "months")%12 <= 0, 
		join([format(dateBetween(now(), prop("Start Date"), "days")), "일"],""),
		join([format(dateBetween(now(),prop("Start Date"),"months")%12), "개월 "], ""))], ""),
join([
	if(dateBetween(prop("End Date"), prop("Start Date"), "years")<=0, "", 
		join([format(dateBetween(prop("End Date"),prop("Start Date"),"years")),"년 "], "")), 
	if(dateBetween(prop("End Date"), prop("Start Date"), "months")%12 <= 0, 
		join([format(dateBetween(prop("End Date"), prop("Start Date"), "days")), "일"],""),
		join([format(dateBetween(prop("End Date"),prop("Start Date"),"months")%12), "개월"], ""))]	, "")
)

 

이론은 위와 동일하다.

이렇게 보면 노션 수식은 어렵다기보다도 노가다에 가까운 듯한... (가독성도 낮아서 쓰는 데에 오래 걸린다.. 흑흑)

 

concat만 의도대로 작동했더라면 훨씬 쉬웠을 것 같은데 어째서...