57

I need to get may as a current month, but I could not do. How can I achieve this?

   let date = NSDate()
   let calendar = NSCalendar.currentCalendar()
   let components = calendar.components([.Day , .Month , .Year], fromDate: date)
   
   let year =  components.year
   let month = components.month
   let day = components.day

I have done this but does not worked.

peterh
  • 11,875
  • 18
  • 85
  • 108
iron
  • 715
  • 1
  • 6
  • 15

3 Answers3

114
let now = Date()
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "LLLL"
let nameOfMonth = dateFormatter.string(from: now)
André Slotta
  • 13,774
  • 2
  • 22
  • 34
  • 7
    The correct format for stand alone month is LLLL http://userguide.icu-project.org/formatparse/datetime – Leo Dabus May 06 '17 at 16:07
  • Is it possible to set the language of the returned month? I tried using locale but it doesn't work. I want to get the current language that is set on iPhone – mikro098 May 10 '18 at 22:01
  • 5
    @codddeer123 The `DateFormatter` uses the device's locale by default. You can override it by setting a different locale of course: `dateFormatter.locale = Locale(identifier: "es")` – André Slotta May 23 '18 at 05:53
  • 1
    If you are displaying something more than just the month, for example month and day, this might be prone to issues. Better to use `.setLocalizedDateFormatFromTemplate` to account for possible localization format order differences. – craft Apr 08 '22 at 19:33
48

If you are using Swift 3.0 then extensions and Date class are great way to go.

try below code

extension Date {
    var month: String {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "MMMM"
        return dateFormatter.string(from: self)
    }    
}

Get work with it like below:

 let date = Date()
 let monthString = date.month
LinusGeffarth
  • 27,197
  • 29
  • 120
  • 174
Balaji Galave
  • 1,066
  • 6
  • 9
16

Swift 3.0 and higher

You use DateFormatter() see below for this used in an extension to Date.

Add this anywhere in your project in global scope.

extension Date {
    func monthName() -> String {
            let df = DateFormatter()
            df.setLocalizedDateFormatFromTemplate("MMM")
            return df.string(from: self)
    }
}

Then you can use this anywhere in your code.

let date = Date()
date.monthName() // Returns current month e.g. "May"
Luke Stanyer
  • 1,404
  • 12
  • 21