2016-10-29 4 views
1

У меня есть два временных интервала, в основном я хочу конвертировать разницу между ними, это мой код. но его не работаетразница между двумя временными интервалами ios components swift 3

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 
} 
+0

когда компоненты вызовов он возвращает ноль – ItsMeMihir

+0

, где 'TimeElapsed и' параметры timeNow' приходят? – dirtydanee

+0

@dirtydanee i update it see – ItsMeMihir

ответ

3

Нет необходимости в любом преобразовании, которое вы выполняете в начале функции. Date(timeIntervalSince1970:) принимает NSTimeInterval, однако, это только typealias для double.

Кроме того, поскольку ваш первый запрос 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 
} 
+0

это Решить спасибо – ItsMeMihir

0

Просто наконечник, есть ошибка в вашей логике, которая делает функцию возврата «Только сейчас» в каждом конкретном случае. Так вот модифицированный код:

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 
    }