我是swift编程的新手,我还没能成功找到代码,以找出两个日期,数年和数日之间的差异。 我尝试了以下代码,但它没有工作
let form = NSDateComponentsFormatter()
form.maximumUnitCount = 2
form.unitsStyle = .Full
let s = form.stringFromTimeInterval( date2.timeIntervalSinceReferenceDate - date1.timeIntervalSinceReferenceDate)
输入
Date1 =“12 / March / 2015”
日期2 =“2015年6月1日”
输出:x年y个月z天
请咨询
答案 0 :(得分:12)
我们可以在Swift 2.0中使用这个功能
func yearsBetweenDate(startDate: NSDate, endDate: NSDate) -> Int
{
let calendar = NSCalendar.currentCalendar()
let components = calendar.components([.Year], fromDate: startDate, toDate: endDate, options: [])
return components.year
}
您可以在此功能中返回任何类似我返回年的内容。这将返回两个日期之间的年数。
你可以写几个月,几天等,以便分别找出两个日期之间的差异,分别是几个月和几天。
修改
Swift 3.0及以上
func yearsBetweenDate(startDate: Date, endDate: Date) -> Int {
let calendar = Calendar.current
let components = calendar.dateComponents([.year], from: startDate, to: endDate)
return components.year!
}
答案 1 :(得分:6)
如果您需要数字上的差异(以年,月,日为单位)
像Swift days between two NSDates或Rajan's answer一样计算NSDateComponents
。
如果您需要差异作为(本地化)字符串将其呈现给用户,
然后像这样使用NSDateComponentsFormatter
let form = NSDateComponentsFormatter()
form.maximumUnitCount = 2
form.unitsStyle = .Full
form.allowedUnits = [.Year, .Month, .Day]
let s = form.stringFromDate(date1, toDate: date2)
正如评论中已经提到的,计算差异 从纯时间间隔之间的日期不能给出正确的 结果是因为关于日期的大部分信息都丢失了。
Swift 3的更新:
let form = DateComponentsFormatter()
form.maximumUnitCount = 2
form.unitsStyle = .full
form.allowedUnits = [.year, .month, .day]
let s = form.string(from: date1, to: date2)
答案 2 :(得分:2)
在Swift 5和iOS 12中,您可以使用以下3种解决方案之一来计算两个日期之间的差异(以年,月,日为单位)。
Calendar
的{{1}}方法 dateComponents(_:from:to:)
有一个称为dateComponents(_:from:to:)
的方法。 Calendar
具有以下声明:
dateComponents(_:from:to:)
返回指定为
func dateComponents(_ components: Set<Calendar.Component>, from start: DateComponents, to end: DateComponents) -> DateComponents
的两个日期之间的差。
下面的Playground示例说明如何使用DateComponents
来计算两个日期之间的时差:
dateComponents(_:from:to:)
import Foundation
let calendar = Calendar.current
let startComponents = DateComponents(year: 2010, month: 11, day: 22)
let endComponents = DateComponents(year: 2015, month: 5, day: 1)
let dateComponents = calendar.dateComponents([.year, .month, .day], from: startComponents, to: endComponents)
print(dateComponents) // prints: year: 4 month: 5 day: 9 isLeapMonth: false
的{{1}}方法 Calendar
有一个称为dateComponents(_:from:to:)
的方法。 dateComponents(_:from:to:)
具有以下声明:
Calendar
返回两个日期之间的时差。
下面的Playground示例说明如何使用dateComponents(_:from:to:)
来计算两个日期之间的时差:
func dateComponents(_ components: Set<Calendar.Component>, from start: Date, to end: Date) -> DateComponents
dateComponents(_:from:to:)
的{{1}}方法 import Foundation
let calendar = Calendar.current
let startDate = calendar.date(from: DateComponents(year: 2010, month: 11, day: 22))!
let endDate = calendar.date(from: DateComponents(year: 2015, month: 5, day: 1))!
let dateComponents = calendar.dateComponents([.year, .month, .day], from: startDate, to: endDate)
print(dateComponents) // prints: year: 4 month: 5 day: 9 isLeapMonth: false
有一个称为string(from:to:)
的方法。 DateComponentsFormatter
具有以下声明:
string(from:to:)
根据两个日期之间的时间差返回格式化的字符串。
下面的Playground示例说明如何使用DateComponentsFormatter
来计算两个日期之间的时差:
string(from:to:)
答案 3 :(得分:0)
试试这个
func calculateDiffInTwoDate (date1: NSDate, date2: NSDate) -> NSInteger {
//var userAge : NSInteger = 0
let calendar : NSCalendar = NSCalendar.currentCalendar()
let unitFlags : NSCalendarUnit = [ .Year , .Month, .Day]
let dateComponentNow : NSDateComponents = calendar.components(unitFlags, fromDate: date2)
let dateComponentBirth : NSDateComponents = calendar.components(unitFlags, fromDate: date1)
if ( (dateComponentNow.month < dateComponentBirth.month) ||
((dateComponentNow.month == dateComponentBirth.month) && (dateComponentNow.day < dateComponentBirth.day))
)
{
return dateComponentNow.year - dateComponentBirth.year - 1
}
else {
return dateComponentNow.year - dateComponentBirth.year
}
}
通过此,您可以在年中的两个日期之间获得差异
答案 4 :(得分:0)
为什么不使用inbuild方法查找2个日期之间的差异(以秒为单位),然后编写一个方法来转换以年,月和日为单位的秒数。
let diff = date1.timeIntervalSinceDate(date2)
答案 5 :(得分:0)
//Assigning Dates
let StartDate = datePicker.date
let currentDate = Date()
//Finding Difference of Dates
let components = Set<Calendar.Component>([.day, .month, .year])
let differenceOfDate = Calendar.current.dateComponents(components, from:
StartDate, to: currentDate)
Print(differenceOfDate)