swift2 以年、月和日期格式计算日期IO之间的持续时间

w9apscun  于 2022-11-06  发布在  Swift
关注(0)|答案(6)|浏览(177)

我是swift编程的新手,我还没能成功地找到用年、月、日来区分两个日期的代码。我尝试了下面的代码,但没有成功

let form = NSDateComponentsFormatter()
form.maximumUnitCount = 2
form.unitsStyle = .Full
let s = form.stringFromTimeInterval( date2.timeIntervalSinceReferenceDate - date1.timeIntervalSinceReferenceDate)

输入
日期1 =“2015年3月12日”
日期2 =“2015年6月1日”
产量:x年y月z日
请指教

5rgfhyps

5rgfhyps1#

我们可以在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
}

你可以返回任何类似于我在这个函数中返回的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!
}
sc4hvdpw

sc4hvdpw2#

如果您需要差值(以年、月、日为单位),则计算NSDateComponents,如Swift days between two NSDatesRajan's answer
如果您需要将差异作为(本地化的)字符串呈现给用户,则使用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)
rta7y2nd

rta7y2nd3#

在Swift 5和iOS 12中,您可以使用以下3种解决方案之一计算两个日期之间的差值(以年、月、日为单位)。

1.使用CalendardateComponents(_:from:to:)方法

Calendar有一个名为dateComponents(_:from:to:)的方法。dateComponents(_:from:to:)有下列宣告:

func dateComponents(_ components: Set<Calendar.Component>, from start: DateComponents, to end: DateComponents) -> DateComponents

返回指定为DateComponents的两个日期之间的差值。
下面的Playground示例显示了如何使用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

#2.使用CalendardateComponents(_:from:to:)方法

Calendar有一个名为dateComponents(_:from:to:)的方法。dateComponents(_:from:to:)有以下声明:

func dateComponents(_ components: Set<Calendar.Component>, from start: Date, to end: Date) -> DateComponents

返回两个日期之间的差值。
下面的Playground示例显示了如何使用dateComponents(_:from:to:)来计算两个日期之间的差值:

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

3.使用DateComponentsFormatterstring(from:to:)方法
DateComponentsFormatter有一个名为string(from:to:)的方法。string(from:to:)有以下声明:

func string(from startDate: Date, to endDate: Date) -> String?

返回基于两个日期之间的时间差的带格式字符串。
下面的Playground示例显示了如何使用string(from:to:)来计算两个日期之间的差值:

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 formatter = DateComponentsFormatter()
formatter.unitsStyle = .full
formatter.allowedUnits = [.year, .month, .day]
let string = formatter.string(from: startDate, to: endDate)!
print(string) // prints: 4 years, 5 months, 9 days
cwxwcias

cwxwcias4#

试试这个

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

通过这个,你可以得到年两个日期之间的差异

webghufk

webghufk5#

为什么不使用inbuild方法来求出两个日期之间的秒差,然后编写一个方法来将秒转换为年、月和日。

let diff = date1.timeIntervalSinceDate(date2)
vsmadaxz

vsmadaxz6#

//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)

相关问题