iOS Swift converting calendar component int month to medium style string month

后端 未结 5 2086
后悔当初
后悔当初 2020-12-09 16:25

I want to display calendar in this format

\"visible

to the user. One option is to

相关标签:
5条回答
  • 2020-12-09 16:53

    You can use DateFormatter as follow:

    extension Formatter {
        static let monthMedium: DateFormatter = {
            let formatter = DateFormatter()
            formatter.dateFormat = "LLL"
            return formatter
        }()
        static let hour12: DateFormatter = {
            let formatter = DateFormatter()
            formatter.dateFormat = "h"
            return formatter
        }()
        static let minute0x: DateFormatter = {
            let formatter = DateFormatter()
            formatter.dateFormat = "mm"
            return formatter
        }()
        static let amPM: DateFormatter = {
            let formatter = DateFormatter()
            formatter.dateFormat = "a"
            return formatter
        }()
    }
    extension Date {
        var monthMedium: String  { return Formatter.monthMedium.string(from: self) }
        var hour12:  String      { return Formatter.hour12.string(from: self) }
        var minute0x: String     { return Formatter.minute0x.string(from: self) }
        var amPM: String         { return Formatter.amPM.string(from: self) }
    }
    

    let date = Date()
    
    let dateMonth  = date.monthMedium  // "May"
    let dateHour   = date.hour12       // "1"
    let dateMinute = date.minute0x     // "18"
    let dateAmPm = date.amPM           // "PM"
    
    0 讨论(0)
  • 2020-12-09 17:02
    I am adding three types. Have a look.
    
            //Todays Date
            let todayDate = NSDate()
            let calendar = NSCalendar(identifier: NSCalendarIdentifierGregorian)!
            let components = calendar.components(.CalendarUnitYear | .CalendarUnitMonth | .CalendarUnitDay, fromDate: todayDate)
            var (year, month, date) = (components.year, components.month, components.day)
            println("YEAR: \(year)  MONTH: \(month) DATE: \(date)")
    
            //Making a X mas Yr
            let morningOfChristmasComponents = NSDateComponents()
            morningOfChristmasComponents.year = 2014
            morningOfChristmasComponents.month = 12
            morningOfChristmasComponents.day = 25
            morningOfChristmasComponents.hour = 7
            morningOfChristmasComponents.minute = 0
            morningOfChristmasComponents.second = 0
    
            let morningOfChristmas = NSCalendar.currentCalendar().dateFromComponents(morningOfChristmasComponents)!
            let formatter = NSDateFormatter()
            formatter.dateStyle = NSDateFormatterStyle.LongStyle
            formatter.timeStyle = .MediumStyle
            let dateString = formatter.stringFromDate(morningOfChristmas)
            print("dateString : \(dateString)")
    
    
            //Current month - complete name
            let dateFormatter: NSDateFormatter = NSDateFormatter()
            let months = dateFormatter.monthSymbols
            let monthSymbol = months[month-1] as! String
            println("monthSymbol  : \(monthSymbol)")
    
    
    Print Results:
    
    YEAR: 2015  MONTH: 10 DATE: 9
    dateString : December 25, 2014 at 7:00:00 AM
    monthSymbol  : October
    
    0 讨论(0)
  • 2020-12-09 17:03

    NSDateFormatter has monthSymbols, shortMonthSymbols and veryShortSymbols properties.

    So try this:

    let dateFormatter: NSDateFormatter = NSDateFormatter()
    
    let months = dateFormatter.shortMonthSymbols
    let monthSymbol = months[month-1] as! String // month - from your date components
    
    println(monthSymbol)
    
    0 讨论(0)
  • 2020-12-09 17:11

    Update Swift 5.x Solution:

    Today is Monday, 20 April, 2020

        let date = Date() // get a current date instance
        let dateFormatter = DateFormatter() // get a date formatter instance
        let calendar = dateFormatter.calendar // get a calendar instance
    

    Now you can get every index value of year, month, week, day everything what you want as follows:

        let year = calendar?.component(.year, from: date) // Result: 2020
        let month = calendar?.component(.month, from: date) // Result: 4
        let week = calendar?.component(.weekOfMonth, from: date) // Result: 4
        let day = calendar?.component(.day, from: date) // Result: 20
        let weekday = calendar?.component(.weekday, from: date) // Result: 2
        let weekdayOrdinal = calendar?.component(.weekdayOrdinal, from: date) // Result: 3
        let weekOfYear = calendar?.component(.weekOfYear, from: date) // Result: 17
    

    You can get an array of all month names like:

        let monthsWithFullName = dateFormatter.monthSymbols // Result: ["January”, "February”, "March”, "April”, "May”, "June”, "July”, "August”, "September”, "October”, "November”, "December”]
        let monthsWithShortName = dateFormatter.shortMonthSymbols // Result: ["Jan”, "Feb”, "Mar”, "Apr”, "May”, "Jun”, "Jul”, "Aug”, "Sep”, "Oct”, "Nov”, "Dec”]
    

    You can format current date as you wish like:

        dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
        let todayWithTime = dateFormatter.string(from: date) // Result: "2020-04-20 06:17:29"
        dateFormatter.dateFormat = "yyyy-MM-dd"
        let onlyTodayDate = dateFormatter.string(from: date) // Result: "2020-04-20"
    

    I think this is the most simpler and updated answer.

    0 讨论(0)
  • 2020-12-09 17:16

    Swift 4.x Solution:

    //if currentMonth = 1
    DateFormatter().monthSymbols[currentMonth - 1]
    

    Answer:

    January

    0 讨论(0)
提交回复
热议问题