How do you create a Swift Date object?

ios, iphone, nsdate, swift

Solution

Swift has its own `Date` type. No need to use `NSDate`.

Creating a Date and Time in Swift

In Swift, dates and times are stored in a 64-bit floating point number measuring the number of seconds since the reference date of January 1, 2001 at 00:00:00 UTC. This is expressed in the `Date` structure. The following would give you the current date and time:

let currentDateTime = Date()

For creating other date-times, you can use one of the following methods.

Method 1

If you know the number of seconds before or after the 2001 reference date, you can use that.

let someDateTime = Date(timeIntervalSinceReferenceDate: -123456789.0) // Feb 2, 1997, 10:26 AM

Method 2

Of course, it would be easier to use things like years, months, days and hours (rather than relative seconds) to make a `Date`. For this you can use `DateComponents` to specify the components and then `Calendar` to create the date. The `Calendar` gives the `Date` context. Otherwise, how would it know what time zone or calendar to express it in?

// Specify date components
var dateComponents = DateComponents()
dateComponents.year = 1980
dateComponents.month = 7
dateComponents.day = 11
dateComponents.timeZone = TimeZone(abbreviation: "JST") // Japan Standard Time
dateComponents.hour = 8
dateComponents.minute = 34

// Create date from components
let userCalendar = Calendar(identifier: .gregorian) // since the components above (like year 1980) are for Gregorian
let someDateTime = userCalendar.date(from: dateComponents)

Other time zone abbreviations can be found here. If you leave that blank, then the default is to use the user's time zone.

Method 3

The most succinct way (but not necessarily the best) could be to use `DateFormatter`.

let formatter = DateFormatter()
formatter.dateFormat = "yyyy/MM/dd HH:mm"
let someDateTime = formatter.date(from: "2016/10/08 22:31")

The Unicode technical standards show other formats that `DateFormatter` supports.

Notes

See my full answer for how to display the date and time in a readable format. Also read these excellent articles:

- How to work with dates and times in Swift 3, part 1: Dates, Calendars, and DateComponents

- How to work with dates and times in Swift 3, part 2: DateFormatter

- How to work with dates and times in Swift 3, part 3: Date arithmetic

Problem

How do you create a date object from a date in swift xcode. eg in javascript you would do: `var day = new Date('2014-05-20');`

Original source

Related problems