【问题标题】:Changing visible months in a Calendar Swift在日历 Swift 中更改可见月份
【发布时间】:2021-05-06 13:20:37
【问题描述】:

我正在与Calendar 合作,并且我能够在今年获得一些东西,我有 1 月、2 月、3 月、4 月、5 月、6 月、7 月……直到 12 月。但是现在因为我们在五月,我不想看到六月,七月,八月......直到十二月。相反,我希望看到 Jan, feb, march, April, may 并能够向后滚动到可能的 ... Nov, 2020Dec, 2020 对于日历的当前实现,我不明白如何选择它。

这是我用来获取当前月份的 private let months = Calendar.current.shortMonthSymbols.map { $0.uppercased() }

这会导致Jan, feb, march, April, may, June, July ... up to December 如何更改此行为以反映我想要的?

【问题讨论】:

    标签: swift


    【解决方案1】:

    在数组上使用一个枚举器,然后使用prefix(while:) 来获取当前月份之前的所有月份。

    let thisMonth = Calendar.current component(.month, from: Date())
    let currentYearMonths = Calendar.current.shortMonthSymbols.enumerated()
        .prefix(while: { $0.offset < thisMonth })
        .filter { $0.offset < thisMonth }
        .map(\.element.localizedUppercase)
    

    对于上一年部分,计算去年,然后使用 map 将年份简单地连接到 .shortMonthSymbols 的元素中

    let aYearAgo = Calendar.current.date(byAdding: .year, value: -1, to: Date())!
    let lastYear = Calendar.current.component(.year, from: aYearAgo)
    
    let lastYearMonths = Calendar.current.shortMonthSymbols.map { "\($0.localizedUppercase), \(lastYear)"}
    

    【讨论】:

    • 感谢您的回复,有没有办法在 current.months 中添加 2020 和 2019 月份?但现在从 2020 年开始的几个月将有 Jan, 2020 Feb, 2020 和 2019 年将是 Jan, 2019 Feb, 2019
    • 这是真正的问题。显示截至当前月份的一年中的其他月份以及年份。
    • 我更多地考虑拥有一系列我想要的年份的可能性。喜欢 [2019, 2020]
    • 通过创建单独的数组来清理答案,因为这就是我最初编写代码的方式
    猜你喜欢
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多