Date to milliseconds and back to date in Swift

date, ios, swift, time

Solution

I don't understand why you're doing anything with strings...

extension Date {
    var millisecondsSince1970:Int64 {
        Int64((self.timeIntervalSince1970 * 1000.0).rounded())
    }
    
    init(milliseconds:Int64) {
        self = Date(timeIntervalSince1970: TimeInterval(milliseconds) / 1000)
    }
}


Date().millisecondsSince1970 // 1476889390939
Date(milliseconds: 0) // "Dec 31, 1969, 4:00 PM" (PDT variant of 1970 UTC)

Problem

I am taking the current time, in UTC, and putting it in nanaoseconds and then I need to take the nanoseconds and go back to a date in local time. I am able to do get the time to nanoseconds and then back to a date string but the time gets convoluted when I go from a string to date. ``` //Date to milliseconds func currentTimeInMiliseconds() -> Int! { let currentDate = NSDate() let dateFormatter = DateFormatter() dateFormatter.dateFormat = format dateFormatter.timeZone = NSTimeZone(name: "UTC") as TimeZone! let date = dateFormatter.date(from: dateFormatter.string(from: currentDate as Date)) let nowDouble = date!.timeIntervalSince1970 return Int(nowDouble*1000) } //Milliseconds to date extension Int { func dateFromMilliseconds(format:String) -> Date { let date : NSDate! = NSDate(timeIntervalSince1970:Double(self) / 1000.0) let dateFormatter = DateFormatter() dateFormatter.dateFormat = format dateFormatter.timeZone = TimeZone.current let timeStamp = dateFormatter.string(from: date as Date) let formatter = DateFormatter() formatter.dateFormat = format return ( formatter.date( from: timeStamp ) )! } } ``` The timestamp is correct but the date returned isn't.

Original source