이번 주인지 확인하는 수식
노션 공식 기능에 이번주 필터가 생겼는데 제대로 동작하지 않는 문제가 있어서 결국 수식을 사용하기로 했습니다. prop("날짜")는 이번주(일요일부터 월요일의 범위)로 지정되어 있으며, 범위 날짜가 아닌 경우에도 아래 수식을 적용할 수 있습니다.
formatDate(prop("날짜"), "w") == formatDate(now(), "w")
일년치만 사용한다면 이렇게만 해도 충분합니다. 그러나 다음 해로 넘어갈 경우 제대로 동작하지 않는 문제가 있습니다. formatDate의 w는 해당하는 주차의 숫자만 표시해주기 때문입니다. 즉, 연도 정보를 갖고 있지 않습니다.
formatDate(prop("날짜"), "Yw") == formatDate(now(), "Yw")
따라서 위와 같이 주w 앞에 연도Y를 추가해주면 해가 넘어가도 문제없이 사용할 수 있습니다.
230215 업데이트
원래 노션에서 일주일 기준을 일요일부터 토요일로 삼아서 위의 수식이 동작했었는데, 시작일을 월요일로 바꿨는지 제대로 동작하지 않습니다. 아래와 같이 수정하면 문제 없이 사용할 수 있습니다.
formatDate(end(prop("날짜")), "Yw") == formatDate(now(), "Yw")
날짜 범위 중 오늘이 포함되어 있는지 확인하는 수식
날짜를 범위로 지정하기도 하고 하루만 지정하기도 할 때 사용할 수 있는 수식입니다.
formatDate(start(prop("날짜")), "YYYYMMDD") <= formatDate(now(), "YYYYMMDD") and formatDate(end(prop("날짜")), "YYYYMMDD") >= formatDate(now(), "YYYYMMDD")
이렇게 써야 하는 이유는 시작날<=now<=마지막날 처럼 그냥 날짜비교 수식을 사용하면 시작날과 마지막날인 경우 제대로 표시되지 않기 때문입니다. 이유는 아마도 now가 타임스탬프까지 포함하기에 그런 것 같다. 그래서 formatDate로 now와 비교해주는 방법이 가장 확실합니다.
롤업 날짜 범위 중 오늘이 포함되어 있는지 확인하는 수식
toNumber(replaceAll(slice(prop("날짜"), 0, 11), "/", "")) <= toNumber(formatDate(now(), "YYYYMMDD")) and toNumber(formatDate(now(), "YYYYMMDD")) <= toNumber(replaceAll(slice(prop("날짜"), 13), "/", ""))
prop("날짜")는 롤업 속성의 날짜라는 점에 주의하자. 롤업으로 가져온 날짜는 문자열이기 때문에 따로 숫자로 변환하는 작업을 추가해주었습니다. 롤업으로 가져온 날짜가 이번 주(일요일부터 월요일의 범위)로 지정되어 있는 경우엔 이번주인지 확인하는 용도로도 사용할 수 있습니다.
위 수식의 내용을 구체적으로 살펴보면
toNumber(replaceAll(slice(prop("날짜"), 0, 11), "/", ""))
toNumber(replaceAll(slice(prop("날짜"), 13), "/", ""))
각각 롤업 날짜 범위 중 시작 날짜와 마지막 날짜가 위와 같이 지정되어 있습니다. 각각 롤업으로 가져온 문자열을 슬라이스 한 후 슬래시를 빼고 숫자로 변환한 것입니다. (더 좋은 방법이 있을 것 같기도 합니다)
toNumber(formatDate(now(), "YYYYMMDD"))
그리고 위의 날짜 사이에 오늘now()이 있는지 확인해줍니다. 비교를 위해 YYYYMMDD의 형식을 숫자로 변환해주었습니다.
남은 날짜, 지난 날짜 표시
예시는 개봉일과 유통기한이지만 남은 날짜, 지난 날짜를 알고 싶다면 어디에든 활용이 가능합니다.
디데이 수식
formatDate(end(prop("Date")), "M월 D일 까지 " + if(end(prop("Date")) < now(), concat("\\D+", format(dateBetween(end(prop("Date")), now(), "days") * -1)), concat("\\D-", format(dateBetween(end(prop("Date")), now(), "days") + 1))))
"M월 D일 까지 D-날짜", 또는 "D+날짜"를 출력하는 수식입니다.
개봉한 지 며칠 째인지 알려주는 수식
if(empty(prop("개봉일")), "", concat(formatDate(prop("개봉일"), "MM/DD 개봉"), " - ", format(dateBetween(now(), prop("개봉일"), "days")), "일 지남"))
만약 개봉일이 비어있다면 빈 문자를 출력합니다. 그렇지 않은 경우에는 "MM/DD 개봉 - D일 지남"이라는 문자열이 출력됩니다.
유통기한까지 며칠 남았는지 알려주는 수식
if(empty(prop("유통기한")), "", concat(formatDate(prop("유통기한"), "유통기한 MM/DD"), " - ", format(dateBetween(prop("유통기한"), now(), "days")), "일 남음"))
만약 유통기한이 비어있다면 빈 문자를 출력합니다. 그렇지 않은 경우에는 "유통기한 MM/DD - D일 남음"이라는 문자열이 출력됩니다.