Arrays 获取数组Swift 5中多个日期之间的时间间隔
正如我在标题中提到的,我有一个日期数组,我想得到这两天之间的时间间隔,这个数组中的第一天将计算一个时间间隔,这个数组中的另一个日期。我试图在图表中表示这些数字(我使用了图表库),下面是我的代码:Arrays 获取数组Swift 5中多个日期之间的时间间隔,arrays,swift,date,charts,Arrays,Swift,Date,Charts,正如我在标题中提到的,我有一个日期数组,我想得到这两天之间的时间间隔,这个数组中的第一天将计算一个时间间隔,这个数组中的另一个日期。我试图在图表中表示这些数字(我使用了图表库),下面是我的代码: var entries = [ChartDataEntry]() for x in relapsesArrayInDate { if x == relapsesArrayInDate.first {
var entries = [ChartDataEntry]()
for x in relapsesArrayInDate {
if x == relapsesArrayInDate.first {
let userPreviousStreak = UserDefaults.standard.integer(forKey: "userPreviousStreak")
let regDate = Auth.auth().currentUser!.metadata.creationDate!
let userFirstDate = regDate.addingTimeInterval(-60*60*24*Double(userPreviousStreak+1))
let firstRelapseDistance = self.calenderC.dateComponents([.day], from: userFirstDate, to: relapsesArrayInDate.first!)
let firstRelapsePeriod = firstRelapseDistance.day!
entries.append(ChartDataEntry(x: 1.0, y: Double(firstRelapsePeriod)))
} else {
let relapseDistance = self.calenderC.dateComponents([.day], from: x , to: x - 1)
let relapsePeriod = relapseDistance.day!
entries.append(ChartDataEntry(x: Double(relapsesArrayInDate.firstIndex(of: x)! + 1), y: Double(relapsePeriod)))
}
}
let set = LineChartDataSet(entries: entries)
set.colors = ChartColorTemplates.material()
let data = LineChartData(dataSet: set)
self.linearChart.data = data
但当我运行代码时,我得到的是:
我希望我的问题很清楚您的代码看起来有点乱 sarrayindate是类型为
[Date]
的数组吗?它是否包含按时间顺序排列的日期?如果是这样,为什么要将日期转换为日期值
下面的代码将以双倍数组的形式给出SarrayIndate中日期之间的差异(以秒为单位的差异)
您应该能够调用该函数,传入dates=RecurseSarrayIndate,并开始于=Auth.Auth().currentUser!。元数据。创建日期代码>
请注意,如果希望开始日期晚于创建日期n天,则不应将-606024*Double(userPreviousStreak+1)添加到创建日期
您应该改为使用日历功能date(通过添加:value:to:wrappingComponents:)
将n天添加到开始日期。-是的,数组为[date],日期按较早者排序。数组中的第一个日期需要与未包含在数组中的另一个日期的差异,因此这可能是使我的代码看起来一团糟的原因:(@duncac您可以简单地压缩集合,并将第一个元素与自身一起删除,然后映射元组let interval=zip(dates.dropFirst(),dates)。map{$1.timeIntervalSince($0)}
@i4mjad所以创建一个新数组,附加第一个日期和现有数组中的所有对象,然后使用我上面概述的方法。@LeoDabus我起得很早(工作中被传呼)既然OP想要包含一个数组中没有的开始日期,为什么不使用zip发布你自己的答案呢?
let differences = [Double]()
for index in 1 ..< relapsesArrayInDate.count {
let start = relapsesArrayInDate[index-1].timeIntervalSinceReferenceDate
let end = relapsesArrayInDate[index].timeIntervalSinceReferenceDate
differences.append(end - start)
}
func intervalsBetween(dates: [Date], startingAt start: Date) -> [TimeInterval] {
//Create a new array that starts with the starting date
let datesPlusStart = [start] + datesArray
//Calculate an array of intervals between dates in datesPlusStart
let intervals = zip(datesPlusStart.dropFirst(), datesPlusStart).map{$0.timeIntervalSince($1) }
return intervals
}