【问题标题】:difference between two time interval ios components swift 3两个时间间隔之间的差异ios组件swift 3
【发布时间】:2016-10-29 11:15:05
【问题描述】:

我有两个时间间隔,基本上我想转换找出它们之间的区别这是我的代码。但是,它不起作用

 func dateformatter(date:Double) -> String {

    let timeElapsed:TimeInterval = TimeInterval(Int(date))
    let timeNow:TimeInterval = TimeInterval(integerLiteral: Int64(Date().timeIntervalSince1970*1000))

    let date2:Date = Date(timeIntervalSince1970: timeElapsed )
    let date1:Date = Date(timeIntervalSince1970: timeNow )

    let calender:Calendar = Calendar.current
    let components:DateComponents = calender.dateComponents([.year, .month, .day, .hour, .minute], from: date1, to: date2)
    var returnString:String = ""
    print(components.second)
    if components.second! < 60 {
        returnString = "Just Now"
    }else if components.minute! >= 1{
        returnString = String(describing: components.minute) + " min ago"
    }else if components.hour! >= 1{
        returnString = String(describing: components.hour) + " hour ago"
    }else if components.day! >= 1{
        returnString = String(describing: components.day) + " days ago"
    }else if components.month! >= 1{
        returnString = String(describing: components.month)+" month ago"
    }else if components.year! >= 1 {
        returnString = String(describing: components.year)+" year ago"
    }
    return returnString
}

【问题讨论】:

  • 组件调用时返回 nil
  • timeElapsed timeNow 参数从何而来?
  • @dirtydanee 我更新看看
  • 您能否具体说明it is not works 是什么意思?您收到什么错误?
  • 初始化DateComponents实例时需要包含.second组件:let components: DateComponents = calender.dateComponents([.year, .month, .day, .hour, .minute, .second], from: date1, to: date2)。除此之外,请阅读可选选项和打开这些选项的安全方法... myOptional! 不安全!)。

标签: ios date swift3 nstimeinterval


【解决方案1】:

无需在函数开始时进行所有转换。 Date(timeIntervalSince1970:) 接受 NSTimeInterval,但是,它只是 doubletypealias

另外,因为您的第一个 if 语句检查 seconds,您需要将 .seconds 包含到组件参数列表中。

您可以执行以下操作:

func dateformatter(date: Double) -> String {

    let date1:Date = Date() // Same you did before with timeNow variable
    let date2: Date = Date(timeIntervalSince1970: date)

    let calender:Calendar = Calendar.current
    let components: DateComponents = calender.dateComponents([.year, .month, .day, .hour, .minute, .second], from: date1, to: date2)
    print(components)
    var returnString:String = ""
    print(components.second)
    if components.second! < 60 {
        returnString = "Just Now"
    }else if components.minute! >= 1{
        returnString = String(describing: components.minute) + " min ago"
    }else if components.hour! >= 1{
        returnString = String(describing: components.hour) + " hour ago"
    }else if components.day! >= 1{
        returnString = String(describing: components.day) + " days ago"
    }else if components.month! >= 1{
        returnString = String(describing: components.month)+" month ago"
    }else if components.year! >= 1 {
        returnString = String(describing: components.year)+" year ago"
    }
    return returnString
}

【讨论】:

    【解决方案2】:

    只是提示,您的逻辑中存在错误,导致函数在每种情况下都返回“Just now”。所以这里是修改后的代码:

    func timeElapsed(date: Date) -> String {
    
            let date1:Date = date
            let date2: Date = Date() // Same you did before with timeNow variable
    
            let calender:Calendar = Calendar.current
            let components: DateComponents = calender.dateComponents([.year, .month, .day, .hour, .minute, .second], from: date1, to: date2)
            print(components)
            var returnString:String = ""
    
            print(components.second!)
    
            if components.second! < 60 {
                returnString = "Just Now"
            }
    
            if components.minute! > 1{
                returnString = String(describing: components.minute!) + " mins ago"
            }
            else if components.minute! == 1 {
    
                returnString = "A minute ago"
            }
    
            if components.hour! > 1{
                returnString = String(describing: components.hour!) + " hours ago"
            }
            else if components.hour == 1 {
    
                returnString = "An hour ago"
            }
    
            if components.day! > 1{
                returnString = String(describing: components.day!) + " days ago"
            }
            else if components.day! == 1 {
    
                returnString = "Yesterday"
            }
    
            if components.month! > 1{
                returnString = String(describing: components.month!)+" months ago"
            }
            else if components.month! == 1 {
    
                returnString = "A month ago"
            }
    
            if components.year! > 1 {
                returnString = String(describing: components.year!)+" years ago"
            }
            else if components.year! == 1 {
    
                returnString = "A year ago"
            }
    
            return returnString
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-22
      • 1970-01-01
      • 2020-03-04
      • 2012-09-18
      • 1970-01-01
      相关资源
      最近更新 更多