0

Hi i have a date in swift that i get from http call ...

Now i want to format this date like : 1st Wed April

let formatter = DateFormatter()
formatter.dateFormat = "F EEEE MMM" 
let now = stats.getData()
let dateString = formatter.string(from: now)

This returns 1 Wednesday Apr but i need to formate date as 1st Wednesday Apr

Savitha
  • 561
  • 6
  • 19
vacca boia
  • 13
  • 5

1 Answers1

1

To solve this we need two formatters, one for the date and one NumberFormatter for formatting 1 into 1st etc. Note that to get the order of the specific weekday in the month we use the date component .weekdayOrdinal.

The date pattern also needs to be changed to E from EEEE to show the abbreviated day name and month needs to be MMMM to show the full month name

let formatter = DateFormatter()
formatter.dateFormat = "E MMMM"
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .ordinal

let now = stats.getData()
let day = Calendar.current.component(.weekdayOrdinal, from: now)
let ordinalDay = numberFormatter.string(from: NSNumber(value: day)) ?? String(day)

let dateString = "\(ordinalDay) \(formatter.string(from: now))"
Joakim Danielson
  • 43,251
  • 5
  • 22
  • 52