ios - dateComponents(_, from, to) 返回错误的月数

标签 ios swift nsdate nscalendar nsdatecomponents

我有一个创建日期的函数...

func date(withYear year: Int, month: Int, day: Int) -> Date {
    let components = DateComponents(calendar: Calendar.current, timeZone: nil, era: nil, year: year, month: month, day: day, hour: 0, minute: 0, second: 0, nanosecond: 0, weekday: nil, weekdayOrdinal: nil, quarter: nil, weekOfMonth: nil, weekOfYear: nil, yearForWeekOfYear: nil)
    return components.date!
}

为了方便起见,它只需要日、月、年。

所以我创建了两个日期。

let startDate = date(withYear: 2016, month: 9, day: 30) // prints to console as 2016-09-29 23:00:00 +0000
let endDate = date(withYear: 2016, month: 11, day: 1)   // prints to console as 2016-11-01 00:00:00 +0000

然后计算它们之间的月数...

let components = Calendar.current.dateComponents([.month], from: startDate, to: endDate)

print(components.month) // returns 1

这不应该是2吗?月份部分是如何计算的?是天数除以 30 还是别的什么?如果是这样,我需要一种新的方法来计算这里的月数。

最佳答案

我有同样的问题,但是 NSCalendar 工作正常,此代码示例证明了这一点。

    let date = NSDate()
    let calendar = NSCalendar.currentCalendar()
    let components = calendar.components([.Day , .Month , .Year], fromDate: date)

    let twoMonthdate = calendar.dateByAddingUnit(.Month, value: 2, toDate:date, options: [])

    let difference = calendar.components([.Month], fromDate: date, toDate: twoMonthdate!, options: [])
    //differences is 2 monthses

在你的情况下,差异是 1 个月零几天。这就是为什么你会收到这样的结果。

关于ios - dateComponents(_, from, to) 返回错误的月数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39487671/

相关文章:

ios - 如何关闭自动手势以使用导航 Controller 返回 View ?

iphone - 将 iOS 联系人同步到应用程序数据库(使用什么作为标识符引用?)

ios - AVAudioSession setCategory .allowBluetooth导致崩溃

ios - 在 swift 中使用 vImageHistogramCalculation 计算图像的直方图

iphone - 事件未添加到 Iphone 5 默认日历中

ios - 在 iOS 设备上显示使用 R 创建的 PDF 图的问题

swift - 如何检测从哪个 ViewController 应用程序进入后台?

ios - 日期格式化程序不适用于 iOS6,但适用于 iOS 7

objective-c - NSDateComponents 工作日不显示正确的工作日?

objective-c - 使用 NSPredicate 过滤 NSMutableArray