Giorgio
Giorgio

Reputation: 2200

RelativeDateTimeFormatter returns one day less than expected

Why the following code prints me "Tomorrow" and not "In 2 days"?

let dateString = "2022-05-21"

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"

let date = dateFormatter.date(from: dateString)!

print(date)
print(Calendar.current.dateComponents([.day, .month, .year], from:date))

let relativeDateTimeFormatter = RelativeDateTimeFormatter()
relativeDateTimeFormatter.dateTimeStyle = .named
relativeDateTimeFormatter.formattingContext = .beginningOfSentence

let now = Date()  // Today is 2022-05-19

print(now)

let dateComponents = Calendar.current.dateComponents([.year, .month, .day], from: now, to: date)

print(dateComponents)

print(relativeDateTimeFormatter.localizedString(from: dateComponents))


The full console log is

2022-05-20 22:00:00 +0000
year: 2022 month: 5 day: 21 isLeapMonth: false 
2022-05-19 15:44:00 +0000
year: 0 month: 0 day: 1 isLeapMonth: false 
Tomorrow

Upvotes: 0

Views: 37

Answers (0)

Related Questions