swift:如何计算日期间隔(今天〜指定日期)

时间:2015-12-28 09:37:02

标签: xcode swift datepicker nsdate

指定当前间隔的日期之后的天数

例如:指定日期= 15/01/2016,今天= 03/01/2016
预期结果:应显示 12天后

5 个答案:

答案 0 :(得分:1)

尝试此扩展程序:

extension NSDate{

    func relativeDaysFromToday()->String
    {
        let now = NSDate()

            let calendar = NSCalendar.currentCalendar()
            let unitFlags:NSCalendarUnit = NSCalendarUnit.Day
            let components = calendar.components(unitFlags, fromDate: now, toDate: self, options: [])
            return "After \(components.day) days"
    }
}

let jan2 = NSDate(timeIntervalSinceNow: 24*60*60*5)

jan2.relativeDaysFromToday()

答案 1 :(得分:1)

试试这个

let startDateString = "03/01/2016" // start date
let endDateString = "15/01/2016" // end date

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "dd/MM/yyyy"

let startDate:NSDate = dateFormatter.dateFromString(startDateString)!
let endDate:NSDate = dateFormatter.dateFromString(endDateString)!

let gregorian = NSCalendar(calendarIdentifier:NSCalendarIdentifierGregorian)
let components = gregorian?.components(NSCalendarUnit.Day, fromDate: startDate, toDate: endDate, options: .MatchFirst)

let day = components?.day
if day == 0 {
  print( "Today")
} else {
  print( "After\(Int64(day!)) day(s)")
}

答案 2 :(得分:1)

您可以将以下代码用于Swift 5:

func DateFormat() -> DateFormatter {
    let x = DateFormatter()
    x.dateFormat = "dd/MM/yyyy"
    x.timeZone = TimeZone(abbreviation: "GMT")
    return x
}

func secondsToDays (seconds : Int) -> (Int) {
    return (seconds / 86400)
}

var dates: Date?
var today: Date?

dates = DateFormat().date(from: "15/01/2016")
today = DateFormat().date(from: "17/01/2016")

let timeInterval = Int(exactly: (today?.timeIntervalSince(dates!))!) ?? 0
print("After", secondsToDays(seconds: timeInterval), "days" ) //After 2 days

答案 3 :(得分:0)

你可以简单地使用NSDateFormatter() ...和NSCalendar() ...尝试这样的事情:

let start = "03/01/2016" 
let end = "15/01/2016"

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "dd/mm/yyyy"

let startDate:NSDate = dateFormatter.dateFromString(start)!
let endDate:NSDate = dateFormatter.dateFromString(end)!

let cal = NSCalendar.currentCalendar()
let unit:NSCalendarUnit = NSCalendarUnit.Day
let components = cal.components(unit, fromDate: startDate, toDate: endDate, options: [])

如果我理解你错了,请随时纠正我。最诚挚的问候,Alex

答案 4 :(得分:0)

我建议使用下一种方法进行计算。

func relativeDaysFromToday(startDate: Date, endDate: Date)->String
{
let diffComponents = Calendar.current.dateComponents([.day], from: startDate, to: endDate)
let days = diffComponents.day
return "After \(days ?? 0) days"
}