swift:如何计算日期间隔(今天~指定日期)
swift: how to calculate the date interval (today~specified day)
从当前间隔指定日期算起的天数,
例如:指定日期=15/01/2016
,今天=03/01/2016
预期结果: 应显示 12 天后
您可以简单地使用 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: [])
如果我理解错了,欢迎指正。最好的问候,亚历克斯
试试这个扩展:
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()
试试这个
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)")
}
您可以使用以下代码 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
我建议使用下一个方法计算。
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"
}
从当前间隔指定日期算起的天数,
例如:指定日期=15/01/2016
,今天=03/01/2016
预期结果: 应显示 12 天后
您可以简单地使用 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: [])
如果我理解错了,欢迎指正。最好的问候,亚历克斯
试试这个扩展:
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()
试试这个
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)")
}
您可以使用以下代码 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
我建议使用下一个方法计算。
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"
}