Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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
Arrays 获取数组Swift 5中多个日期之间的时间间隔_Arrays_Swift_Date_Charts - Fatal编程技术网

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
}