以年,月和日期格式

时间:2015-11-18 12:32:19

标签: ios swift date swift2 ios9

我是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天

请咨询

6 个答案:

答案 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 NSDatesRajan'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种解决方案之一来计算两个日期之间的差异(以年,月,日为单位)。


#1。使用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:)

#2。使用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

#3。使用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)