在Swift中,能否从当前日期减去天数、月份或年份?

12

你好,我想从当前日期减去天数、月份或一年。 我可以使用下面的代码创建一个距离当前日期一周后的日期。

let date = Date().addingTimeInterval(TimeInterval(86400*7))

如何创建一个比当前日期早一周的日期?


当你说“...我想从当前日期中减去天数、月份或一年”时,你是指你想从一个日期中减去一定数量的天数、月份或年份吗?还是你想要一个不包括月份(或年份)值的日期?Tarun的答案告诉你如何从日期中减去日历单位。第二件事情没有意义。 - Duncan C
我的意思是第一件事。删除可能是一个不好的描述。我会把它改成减去。 - comhendrik
3个回答

19
你应该使用 Calendar 来进行这些计算,而不是硬编码每天的 86400 秒。
if let date = Calendar.current.date(byAdding: .day, value: -7, to: Date()) {
   // Use this date
}

4

Swift 5

用于在当前日期上加减天、月、年的函数。

func addOrSubtractDay(day:Int)->Date{
  return Calendar.current.date(byAdding: .day, value: day, to: Date())!
}

func addOrSubtractMonth(month:Int)->Date{
  return Calendar.current.date(byAdding: .month, value: month, to: Date())!
}

func addOrSubtractYear(year:Int)->Date{
  return Calendar.current.date(byAdding: .year, value: year, to: Date())!
}

现在正在调用该函数。
//Subtracting
var daySubtractedDate = addOrSubtractDay(-7)
var monthSubtractedDate = addOrSubtractMonth(-7)
var yearSubtractedDate = addOrSubtractYear(-7)

//Adding
var dayAddedDate = addOrSubtractDay(7)
var monthAddedDate = addOrSubtractMonth(7)
var yearAddedDate = addOrSubtractYear(7)
  • 添加日期,请传递未来的值
  • 减去日期,请传递负数值

3
请添加以下扩展:
extension Date {
    func get(_ components: Calendar.Component..., calendar: Calendar = Calendar.current) -> DateComponents {
        return calendar.dateComponents(Set(components), from: self)
    }

    func get(_ component: Calendar.Component, calendar: Calendar = Calendar.current) -> Int {
        return calendar.component(component, from: self)
    }
}

使用以下方式使用扩展:

let date = Date()

let components = date.get(.day, .month, .year)
if let day = components.day, let month = components.month, let year = components.year {
    print("day: \(day), month: \(month), year: \(year)")
}

获取上周日期,与今天精确对应

let lastWeekDate = Calendar.current.date(byAdding: .weekOfYear, value: -1, to: Date())!

这个带有扩展名的方式非常有趣。 :) - comhendrik
1
扩展可以让你的编程变得更加容易,因为通过扩展,你可以减少代码量和复杂度。 - jignesh
为什么不让您的get函数接受一个日历组件值的集合,而不是使用可变参数?这就是开发人员习惯于看到组件列表的方式。 - Duncan C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接