Home > front end >  Convert date with timezone
Convert date with timezone

Time:12-15

I am getting date from server: 2022-12-14 20:59:59 0000 I have view with promo codes, so according to received date I should show after how many seconds it will be expired.

For example if my current date is 2022-12-14 19:59:59 0000, I must show 60:00 seconds. If the users timezone is GMT 4, he must see 60:00 seconds as well.

So I use this code:

 let currentTime = Int(Date().timeIntervalSince1970)
 let expirationDate = model.expirationDate

 expiredText = expirationDate.dateStringWithFormat("dd.MM.yyyy")
 timeLeft = Int(expirationDate.timeIntervalSince1970) - currentTime
           

Result is: currentTime: 2022-12-14 13:48:16 0000 // my current time is 16:48:16

expirationDate: 2022-12-14 20:59:59 0000

timeLeft: "0d. 07:11:43"

So Date() returns wrong date.

I tried to use calendar, but result is the same.

let calendar = Calendar(identifier: .gregorian)
let currentDate = Date()
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss:Z"
dateFormatter.timeZone = calendar.timeZone

How can I correctly convert my timezone to timezone of received date or vice versa? Thanks

CodePudding user response:

I think you are making this more complicated than it is.

We have a server timestamp

let serverDate = "2022-12-14 20:59:59  0000"

that we convert to a Date using a formatter

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ssZ"

Then we want to calculate the difference between the server data and now

if let expirationDate = dateFormatter.date(from: serverDate) {
    let components = Calendar.current.dateComponents([.day, .hour, .minute, .second], from: .now, to: expirationDate)
}

and then we can use a DateComponentsFormatter to get the difference as a string

let compFormatter = DateComponentsFormatter()
print(compFormatter.string(from: components))
  • Related