버그 잡이

Swift - "오늘 하루 보지 않기" 팝업 Date() 계산하기 본문

Swift

Swift - "오늘 하루 보지 않기" 팝업 Date() 계산하기

버그잡이 2020. 9. 28. 22:18

 

팝업에는 보통 "오늘 하루 보지 않기" 버튼이 함께 있습니다.

 

하루에 대한 계산 기준은 기획에 따라 달라질 수 있는데요.

 

1. 지금부터 24시간 이후 다시 띄우기

2. 내일 0시부터 다시 띄우기

 

위와 같은 시간은 어떻게 계산할 수 있을까요?

 

 

 

1. 지금부터 24시간 이후 팝업 다시 띄우기

 

Calendar 구조체를 활용하면 간단하게 지금 날짜에 하루를 더할 수 있습니다.

현재 시간에 하루를 더하면 됩니다.

let today = Date()
let nextDate = Calendar.current.date(byAdding: .day, value: 1, to: today)

print(today)   // 2020-09-28 12:44:35 +0000
print(nextDate)    //Optional(2020-09-29 12:44:35 +0000)

 

팝업을 띄울지 말지는 nextDate가 현재 날짜보다 작은 경우에 팝업을 띄우고

그렇지 않은 경우는 팝업을 띄우지 않으면 되겠죠?

 

 

 

2. 내일 0시부터 팝업 다시 띄우기

 

하루를 더하는 것은 위와 동일합니다.

단, 여기에 Time을 00:00:00으로 만드는 작업을 추가해줘야겠죠?

 

var component = Calendar.current.dateComponents([.year, .month, .day], from: Date())
component.timeZone = TimeZone(abbreviation: "UTC")
let dateWithoutTime = Calendar.current.date(from: component)!

let nextDate = Calendar.current.date(byAdding: .day, value: 1, to: dateWithoutTime)

print(dateWithoutTime)    // 2020-09-28 00:00:00 +0000
print(nextDate)    // Optional(2020-09-29 00:00:00 +0000)

 

DateComponents를 활용하면 원하는 내가 원하는 시간의 요소만 넘겨줄 수 있습니다.

 

TimeZone을 UTC로 해준 이유는 timezone을 설정 하지 않는 경우(꼭, UTC일 필요는 없습니다.)

'2020-09-28 15:00:00 +0000' 로 출력되기 때문입니다.

(구글링 해봤는데 명확한 이유를 못 찾겠네요. 제 추측으로는 Swfit 오류인 것 같은데... 이유를 아시는 분은 댓글로 남겨주시면 감사하겠습니다 ㅠ)

-------

 

(24.07.28 업데이트)

 

위처럼 UTC로 timezone을 잡으면 정확한 날짜 비교가 안 될 수 있습니다.

KST로 timezone을 잡는 것이 보다 정확합니다. 관련 내용은 아래 블로그 내용 참고 부탁드립니다.

 

https://jinsangjin.tistory.com/189

 

Swift - Date()는 왜 9시간 전의 날짜를 반환할까?

문제의 발단오늘 하루 동안 다시 보지 않기를 위해서현재 시간에 1일을 더한 날짜를 저장하고그 시간을 현재 시간과 비교하는 로직을 구현해야 했는데요.관련해서 print문을 찍어보니 Date()가 9시

jinsangjin.tistory.com

 

 

 

 

반응형
Comments