Вычислить время между текущим временем и старым временем Swift - PullRequest
0 голосов
/ 26 апреля 2018

Я работаю над датой и временем, когда веду журнал входа в систему и выхода из нее. Например, Время входа в систему составляет 12:45, а время выхода из системы - 1:45, поэтому необходимо проверить, сколько часов пользователь был в сети. У меня есть и время, и ниже приведен код, в котором я пытаюсь проверить максимальные часы, добавляя, но я не получаю нужного мне результата.

//Current time
let formatter = DateFormatter()
formatter.timeStyle = .medium
formatter.dateStyle = .none
outTimeString = formatter.string(from: currentDateTime) as NSString

//LoggedIn Time
inTimeString = "12:49:50"
let inFormatter = DateFormatter()
inFormatter.dateFormat = "HH:mm:ss"

let outFormatter = DateFormatter()
outFormatter.dateFormat = "hh:mm"

let inTime = inTimeString
let date = inFormatter.date(from: inTime)!
let inStr = outFormatter.string(from: date)
print(inStr)->12:49:50

let outTime = outTimeString
let outDate = inFormatter.date(from: outTime as String)!
let outStr = outFormatter.string(from: outDate)
print(outStr)->16:10:15

//Adding 4 hour to logged in timw
let calendar = NSCalendar.current
let finaldate = date.addingTimeInterval(-4 * 60.0 * 60.0)
print(finaldate)->2000-01-01 03:19:50 +0000

Проблема в том, что я получаю неправильный вывод при добавлении 4 часов к зарегистрированному времени.

Мне нужно общее время входа в систему или добавить 4 часа к первоначальному времени входа в систему. Любой подойдет.

Помощь очень ценится.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Расчет общего времени входа в систему.

var totalTimeLoggedIn: TimeInterval = 3600 // 1 hour

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

guard
    let loginTimeDate = dateFormatter.date(from: "26-04-2018 12:00:00"),
    let logoutTimeDate = dateFormatter.date(from: "26-04-2018 13:00:00")
else {
    return
}

let timeLoggedIn = logoutTimeDate.timeIntervalSince(loginTimeDate)
totalTimeLoggedIn += timeLoggedIn

print("totalTimeLoggedIn: \(totalTimeLoggedIn.stringValue())") // totalTimeLoggedIn: 02:00:00

Расширение, используемое для печати общего времени входа в систему в часах: минутах: секундах.

extension TimeInterval {

    /// Returns the time interval into a string value in hours:minutes:seconds (e.g. 09:15:34)
    func stringValue(removeHoursIfEmpty:Bool = true) -> String {
        if(self.isNaN){
            return "00:00"
        }

        var value = self

        if value < 0 {
            value = 0
        }

        let hours:Int = Int(value / 3600)
        let minutes:Int = Int((value.truncatingRemainder(dividingBy: 3600)) / 60)
        let seconds:Int = Int(value.truncatingRemainder(dividingBy: 60))

        if (hours > 0 || removeHoursIfEmpty == false){
            return String(format: "%02d:%02d:%02d", hours, minutes, seconds)
        } else {
            return String(format: "%02d:%02d", minutes, seconds)
        }
    }
}
0 голосов
/ 26 апреля 2018

Попробуйте приведенный ниже код, надеюсь, он вам поможет.

func findIntervalBtwToDate(startingDate: String, endingDate : String) -> TimeInterval {
        var interval = 0.0
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "HH:mm:ss"
        dateFormatter.timeZone = NSTimeZone(name: "UTC")! as TimeZone
        guard let endDate = dateFormatter.date(from: endingDate), let startDate = dateFormatter.date(from: startingDate) else { return interval }
        interval = endDate.timeIntervalSince(startDate)
        return interval
    }
...