Как рассчитать время (минуты) между двумя датами в Swift? - PullRequest
0 голосов
/ 23 июня 2019

Что мы получили : Дата + время (формат гггг-мм-дд чч: мм а)

Что мы ищем : Разница во времени в минутах

Какая операция : NewDate - OldDate

Итак, мне интересно, как я мог достичь поставленной цели? Я хотел бы отформатировать дату и время в США, независимо от того, какой язык у пользователя. Как я могу это сделать?

Затем я сохраню oldTime в UserDefaults и буду использовать его для последующих вычислений. Цель состоит в том, чтобы задержать пользователя на 5 минут, и будут выполнены расчеты, чтобы определить, должен ли пользователь задерживаться или нет.

Ответы [ 3 ]

1 голос
/ 23 июня 2019

Просто создайте функцию, которая берет две даты и сравнивает их следующим образом.

import UIKit


func minutesBetweenDates(_ oldDate: Date, _ newDate: Date) -> CGFloat {

    //get both times sinces refrenced date and divide by 60 to get minutes
    let newDateMinutes = newDate.timeIntervalSinceReferenceDate/60
    let oldDateMinutes = oldDate.timeIntervalSinceReferenceDate/60

    //then return the difference
    return CGFloat(newDateMinutes - oldDateMinutes)
}


//Usage:

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

//You'll need both dates to compare, you can get them by just storing a Date object when you first start the timer.
//Then when you need to check it, compare it to Date()
let oldDate: Date = myDateFormatter.date(from: String("2019-06-22 11:25"))

func validateRefresh() {

    //do the comparison between the old date and the now date like this.
    if minutesBetweenDates(oldDate, Date()) > 5 {
        //Do whatever
    }
}
1 голос
/ 23 июня 2019

Вы говорите:

Я хотел бы отформатировать дату и время в США, независимо от того, какой язык у пользователя.Как я могу это сделать?

Укажите Locale из en_US_POSIX:

let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd hh:mm a"
formatter.locale = Locale(identifier: "en_US_POSIX")

Язык не единственный вопрос.

  • Есть также вопрос о часовом поясе.Например, вы едете из Чикаго и едете из центральных часовых поясов в восточные;Вы действительно хотите считать, что прошел один час?

  • Вы действительно хотите сбросить секунды?Если вы сделаете это, то 59 секунд с 8:00:00 до 20:00:59 будут считаться «нулевыми минутами», а одна секунда с 8:00:59 до 8:01:00 будет считаться «одной».минута ».

Честно говоря, если бы я хотел сохранить строку даты, не зависящую от локали и часового пояса, я бы предложил использовать ISO8601DateFormatter.

Тогда ясохранит oldTime в UserDefaults и будет использовать его для последующих вычислений.

Если именно поэтому вы используете DateFormatter, я бы предложил сохранить объект Date напрямую,

UserDefaults.standard.set(oldTime, forKey: "oldTime")

И для его получения:

if let oldTime = UserDefaults.standard.object(forKey: "oldTime") as? Date {
    ...
}

В терминах вычисления количества минут между двумя Date объектами

let minutes = Calendar.current
    .dateComponents([.minute], from: date1, to: date2)
    .minute

Есливам нужно количество секунд, вы также можете использовать timeIntervalSince:

let seconds = date2.timeIntervalSince(date1)

И если вы хотите показать количество прошедшего времени в виде удобной локализованной строки:

let intervalFormatter = DateComponentsFormatter()
intervalFormatter.allowedUnits = [.minute, .second]
intervalFormatter.unitsStyle = .full
let string = intervalFormatter.string(from: date1, to: date2)
0 голосов
/ 23 июня 2019

Я не уверен, что ваш вопрос - лучший способ достичь своей цели, но приведенный ниже код будет работать.

let dateFormatterNow = DateFormatter()
dateFormatterNow.dateFormat = "yyyy-MM-dd hh:mm a"
dateFormatterNow.timeZone = TimeZone(abbreviation: "EST")

let oldDateString = "2019-06-23 12:44 p"
let oldDate = dateFormatterNow.date(from: oldDateString)

let newDateString = "2019-06-23 12:54 p"
let newDate = dateFormatterNow.date(from: newDateString)

if let oldDate = oldDate, let newDate = newDate {
    let diffInMins = Calendar.current.dateComponents([.minute], from: oldDate, to: newDate).minute
    print(diffInMins)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...