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');`