【问题标题】:Get Date by supplying a month and year通过提供月份和年份获取日期
【发布时间】:2021-05-19 19:01:53
【问题描述】:

我正在尝试创建一个接受两个参数的日期扩展静态函数:(month: Int, year: Int) 并返回 -> Date

返回的月份是它的 .startOfMonth:

var startOfMonth: Date {
    let calendar = Calendar(identifier: .gregorian)
    let components = calendar.dateComponents([.year, .month], from: self)
    return  calendar.date(from: components)!
}

我知道如何通过将 n-months 添加到当前来检索未来的一个月:

func addMonths(_ numMonths: Int) -> Date {
    let cal = NSCalendar.current
    return cal.date(byAdding: .month, value: numMonths, to: self)!
}

而且我想这可以以一种迂回的方式用于确定我正在寻找的内容,首先确定从当前月份开始的几个月是我有兴趣获取返回日期的月份。但如果我可以在不需要执行此步骤的情况下检索它,我会更喜欢,特别是如果我实际上不确定该月是否真的在未来。

【问题讨论】:

  • @JoakimDanielson 他的扩展程序将返回日期实例的月初。 OP 想要的是指定年份和月份。
  • @JoakimDanielson 我确实理解了这个问题。不确定你不清楚什么。
  • @JoakimDanielson 我同意你的最后评论,但第一个没有意义。
  • 如果这个问题更像是一个请求,我们深表歉意。需要明确的是,我对如何实现这一点一无所知(尽管在发布之前进行了很多搜索),这就是为什么这个问题不包括任何会导致明确问题/问题的失败尝试。
  • FWIW,我已经编辑了这个问题,以方便将来查看这个问题的人。

标签: swift date calendar nsdateformatter nsdatecomponents


【解决方案1】:

您可以使用 DateComponents 初始化程序来组成一个新的日期,只需传递月份和年份组件。只要确保也传递一个日历,否则结果将为零。可能是这样的:

extension Date {
    static func startOfMonth(for month: Int, of year: Int, using calendar: Calendar = .current) -> Date? {
        DateComponents(calendar: calendar, year: year, month: month).date
    }
}

Date.startOfMonth(for: 2, of: 2021)  // "Feb 1, 2021 at 12:00 AM"

【讨论】:

  • 非常感谢里奥。我有一种感觉,这种能力相对容易实现,但也许它太基础了,以至于我没有看到任何关于它的东西。而且,同意,它是一个静态函数(我最初确实意识到了这一点)。
猜你喜欢
  • 2021-12-16
  • 1970-01-01
  • 1970-01-01
  • 2017-01-19
  • 2021-03-15
  • 2021-10-02
  • 2018-02-16
  • 1970-01-01
相关资源
最近更新 更多