Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 提取时间数组中最接近当前时间的时间。大学环行巴士到达通知系统_Ios_Iphone_Arrays_Time_Swift3 - Fatal编程技术网

Ios 提取时间数组中最接近当前时间的时间。大学环行巴士到达通知系统

Ios 提取时间数组中最接近当前时间的时间。大学环行巴士到达通知系统,ios,iphone,arrays,time,swift3,Ios,Iphone,Arrays,Time,Swift3,我将在大学内提供一个循环巴士通知系统 我想提取最接近时间数组(gateArray)中当前时间的时间,并告诉我还有多少分钟才能到达 例如,如果数组gateArray=[“07:40”、“08:00”、“08:16”、“08:32”、“08:48”、“09:04”、“09:20”], 如果当前时间为08:03,则阵列的输出时间为08:16而不是08:00,并且出发时间与当前时间之间的差值为08:16(出发时间)-08:03(当前时间),以计算时间间隔并显示UITextView->>“13分钟后出发”

我将在大学内提供一个循环巴士通知系统

我想提取最接近时间数组(gateArray)中当前时间的时间,并告诉我还有多少分钟才能到达

例如,如果数组gateArray=[“07:40”、“08:00”、“08:16”、“08:32”、“08:48”、“09:04”、“09:20”], 如果当前时间为08:03,则阵列的输出时间为08:16而不是08:00,并且出发时间与当前时间之间的差值为08:16(出发时间)-08:03(当前时间),以计算时间间隔并显示UITextView->>“13分钟后出发”

当前时间上午09:00>>门阵列到“09:04”提取>>4分钟后出发”


当前时间上午09:05>>门阵列到“09:20”提取>>“15分钟后出发”

Swift 3版本,增加了第二天案例处理:

import UIKit

struct ArrivalDataContainer {
    var  date = Date()
    var timeString = "00:00"
    var currentMinuteDifference = 0
}

let currentDate = Date()

let unitFlags: Set = Set<Calendar.Component>([.day, .month, .year])
var components = NSCalendar.current.dateComponents(unitFlags, from: currentDate)

let gateArray = ["07:40", "08:00", "08:16", "08:32", "08:48", "09:04", "09:20", "23:00"]

var arrivalArray = [ArrivalDataContainer]()

for timeString in gateArray {
    let timeAndMinutes = timeString.components(separatedBy: ":")
    components.setValue(Int(timeAndMinutes[0])!, for: .hour)
    components.setValue(Int(timeAndMinutes[1])!, for: .minute)
    let newDate = NSCalendar.current.date(from: components)
    let difference = NSCalendar.current.dateComponents(Set<Calendar.Component>([.minute]), from: currentDate, to: newDate!).minute
    let dataContainer = ArrivalDataContainer(date: newDate!, timeString: timeString, currentMinuteDifference: difference!)
    arrivalArray.append(dataContainer)
}

let minimumPositiveDifference = arrivalArray.filter{ $0.currentMinuteDifference > 0 }.sorted(by: { $0.currentMinuteDifference < $1.currentMinuteDifference }).first

if let firstWithinSameDay = minimumPositiveDifference {
    print("Departure in \(firstWithinSameDay.currentMinuteDifference) minute(s)")
}
else {
    let largestNegativeDifference = arrivalArray.sorted(by: { $0.currentMinuteDifference < $1.currentMinuteDifference }).first
    print("Next departure \(largestNegativeDifference?.timeString)")
}
导入UIKit
结构ArrivalDataContainer{
变量日期=日期()
var timeString=“00:00”
var CurrentMinutedDifference=0
}
让currentDate=Date()
let unitFlags:Set=Set([.day、.month、.year])
var components=NSCalendar.current.dateComponents(unitFlags,from:currentDate)
让gateArray=[“07:40”、“08:00”、“08:16”、“08:32”、“08:48”、“09:04”、“09:20”、“23:00”]
var arrivalArray=[ArrivalDataContainer]()
用于网关阵列中的时间字符串{
让timeAndMinutes=timeString.components(以“:”分隔)
setValue(Int(timeAndMinutes[0])!,表示:。小时)
setValue(Int(timeAndMinutes[1])!,表示:。分钟)
让newDate=NSCalendar.current.date(from:components)
让difference=NSCalendar.current.dateComponents(Set(.minute)),from:currentDate,to:newDate!).minute
让dataContainer=ArrivalDataContainer(日期:newDate!,时间字符串:时间字符串,currentMinuteDifference:difference!)
arrivalArray.append(数据容器)
}
让minimumPositiveDifference=arrivalArray.filter{$0.currentMinuteDifference>0}。排序(按:{$0.currentMinuteDifference<$1.currentMinuteDifference})。首先
如果let firstWithinSameDay=最小正差{
打印(“在\(第一次在上午。当前分钟差异)分钟内离开”)
}
否则{
设largestNegativeDifference=arrivalArray.sorted(按:{$0.currentMinuteDifference<$1.currentMinuteDifference})。首先
打印(“下一次出发\(最大负差异?.timeString)”)
}
Swift 2版本这是最初的答案

import UIKit

struct ArrivalDataContainer {
    var  date = NSDate()
    var timeString = "00:00"
    var currentMinuteDifference = 0
}

let currentDate = NSDate()

let unitFlags: NSCalendarUnit = [.Day, .Month, .Year]
let components = NSCalendar.currentCalendar().components(unitFlags, fromDate: currentDate)

let gateArray = ["07:40", "08:00", "08:16", "08:32", "08:48", "09:04", "09:20", "23:00"]

var arrivalArray = [ArrivalDataContainer]()

for timeString in gateArray {
    let timeAndMinutes = timeString.componentsSeparatedByString(":")
    components.setValue(Int(timeAndMinutes[0])!, forComponent: .Hour)
    components.setValue(Int(timeAndMinutes[1])!, forComponent: .Minute)
    let newDate = NSCalendar.currentCalendar().dateFromComponents(components)
    let difference = NSCalendar.currentCalendar().components([.Minute], fromDate: currentDate, toDate: newDate!, options: []).minute
    let dataContainer = ArrivalDataContainer(date: newDate!, timeString: timeString, currentMinuteDifference: difference)
    arrivalArray.append(dataContainer)
}

let minimumPositiveDifference = arrivalArray.filter{ $0.currentMinuteDifference > 0 }.sort({ $0.currentMinuteDifference < $1.currentMinuteDifference })[0].currentMinuteDifference

print("Departure in \(minimumPositiveDifference) minute(s)")
导入UIKit
结构ArrivalDataContainer{
var date=NSDate()
var timeString=“00:00”
var CurrentMinutedDifference=0
}
让currentDate=NSDate()
let unitFlags:NSCalendarUnit=[.Day、.Month、.Year]
让components=NSCalendar.currentCalendar().components(unitFlags,fromDate:currentDate)
让gateArray=[“07:40”、“08:00”、“08:16”、“08:32”、“08:48”、“09:04”、“09:20”、“23:00”]
var arrivalArray=[ArrivalDataContainer]()
用于网关阵列中的时间字符串{
让timeAndMinutes=timeString.componentsSeparatedByString(“:”)
组件。设置值(Int(timeAndMinutes[0])!,用于组件:。小时)
组件。设置值(Int(timeAndMinutes[1])!,用于组件:。分钟)
让newDate=NSCalendar.currentCalendar().dateFromComponents(组件)
让difference=NSCalendar.currentCalendar().components([.Minute],fromDate:currentDate,toDate:newDate!,选项:[]).Minute
让dataContainer=ArrivalDataContainer(日期:newDate!、时间字符串:时间字符串、currentMinuteDifference:difference)
arrivalArray.append(数据容器)
}
设minimumPositiveDifference=arrivalArray.filter{$0.currentMinuteDifference>0}.sort({$0.currentMinuteDifference<$1.currentMinuteDifference})[0]。currentMinuteDifference
打印(“在\(最小正差)分钟内离开”)
  • 将到达时间表示为日期
  • 选择最小差值并打印出发间隔字符串
  • 仍然需要弄清楚第二天的第一个是不是最近的一个。它可能是一分钟差最大的一个