如何获得两个日期之间的合计月份?以下是获得约会的正常方式
1) startDate: 2020-2-22 10:25:00
2) endDate: 2020-3-3 12:34:00
let diffInDate:Int = Calendar.current.dateComponents([.month], from: startDate, to: endDate).month!如果我们按照上面给定的日期检查,由于不是总共30天,它将返回0。
现在我想要一个月差的结果,如果我们检查上面的日期,它应该返回1,因为月份发生了变化。那么有没有办法检查包括那个月在内的日期差异呢?
发布于 2020-03-03 14:47:10
正如您已经正确识别的那样,dateComponents(_:from:to:)不会计算小数月份。
然而,有another overload,它计算DateComponents而不是Dates之间的差值。我们可以从开始和结束Date中去掉所有不需要的东西(天、小时、分钟等),将它们传递到这个重载中,它应该会为我们进行计算。这类似于在减去浮点数之前对它们进行舍入,这样您就可以得到它们的整数部分之间的差值。
let startDateComponents = Calendar.current.dateComponents([.year, .month], from: startDate)
let endDateComponents = Calendar.current.dateComponents([.year, .month], from: endDate)
let diffInDate = Calendar.current.dateComponents([.month], from: startDateComponents, to: endDateComponents).month!请注意,我们还获得了开始日期和结束日期的year组件,因为在计算中也需要年份。但是当我们计算差值时,我们只需要month。
发布于 2020-03-03 14:09:15
从startDate和endDate获取month组件,然后计算它们之间的差异,即
let startMonth = Calendar.current.component(.month, from: startDate)
let endMonth = Calendar.current.component(.month, from: endDate)
let difference = abs(endMonth - startMonth) //1发布于 2020-03-03 15:24:21
我想指出的是,这个问题应该经过编辑,表明您希望知道如何列出月份,因为计算表示两个日期之间包含的月数的整数可能是完全不同的任务。对于这一点,sweeper的答案应该已经被认为足够了。
我将尝试提供一个解决方案来回应您的评论,其中您澄清您想要一个月份的列表。
import UIKit
func makeDate(year: Int, month: Int, day: Int) -> Date {
let calendar = Calendar(identifier: .gregorian)
let components = DateComponents(year: year, month: month, day: day) //, hour: hr, minute: min, second: sec)
return calendar.date(from: components)!
}
let date1 = makeDate(year: 2016, month: 10, day: 23) // 23 OCT 2016
let date2 = makeDate(year: 2020, month: 7, day: 10) // 10 JULY 2020
func printMonths(date1: Date, date2: Date) {
guard date1 < date2 else {return}
let month1 = Calendar.current.component(.month, from: date1)
let month2 = Calendar.current.component(.month, from: date2)
let year1 = Calendar.current.component(.year, from: date1)
let year2 = Calendar.current.component(.year, from: date2)
if year1 == year2 {
for month in month1...month2 {
print(DateFormatter().monthSymbols[month - 1])
}
} else {
for year in year1...year2 {
print(year)
switch year {
case year1:
for month in month1...12 {
print(" \(DateFormatter().monthSymbols[month - 1])")
}
case year2:
for month in 1...month2 {
print(" \(DateFormatter().monthSymbols[month - 1])")
}
default:
for month in 1...12 {
print(" \(DateFormatter().monthSymbols[month - 1])")
}
}
print()
}
}
}
printMonths(date1: date1, date2: date2)此函数将按从date1到date2的顺序打印月份名称,如果两个日期具有不同的年份,则打印月份的年份。
它可以很容易地修改为打印总月数,只需在每次打印月名时使用计数器,如果您也想这样做的话。
示例日期的输出:
2016
October
November
December
2017
January
February
March
April
May
June
July
August
September
October
November
December
2018
January
February
March
April
May
June
July
August
September
October
November
December
2019
January
February
March
April
May
June
July
August
September
October
November
December
2020
January
February
March
April
May
June
Julyhttps://stackoverflow.com/questions/60500764
复制相似问题