如何快速获取一个月的对象

Posted

技术标签:

【中文标题】如何快速获取一个月的对象【英文标题】:How to get objects for a month in swift 【发布时间】:2015-12-02 11:35:34 【问题描述】:

我有一个数组,这个数组包含 Observation 类型元素,其中有一个 date 属性。

我只想根据月份和年份获取所有元素。

假设我的日期是 2015 年 1 月 11 日,所以我想从 observationList 中获取所有元素,这些元素有 11 个月和 2015 年。

示例代码如下,

class  Observation

  var date:NSDate = NSDate()
  var value:String = ""


var observationList = [Observation]()

假设上面的observationList 有元素,那么我将如何获取所有元素,例如2015 年 11 月?

【问题讨论】:

为此使用NSDateComponents。您需要一个 NSCalendar 的实例来从日期中获取日期组件。 【参考方案1】:

你可以过滤你的数组

var observations = [Observation]()

使用 filter 这样的方法

let calendar = NSCalendar.currentCalendar()
let filteredObservations = observations.filter  (observation) -> Bool in
    let components = calendar.components([.Month, .Year], fromDate:observation.date)
    return components.month == 11 && components.year == 2015

【讨论】:

【参考方案2】:

正如@dasdom 所指出的,您需要一个 NSCalendar 来获取 NSDate 的组件。

let calendar = NSCalendar.currentCalendar() // you can also ask for a specific calendar (e.g Gregorian)
let components = calendar.components([.Month, .Year], fromDate:date)

【讨论】:

【参考方案3】:

创建一个扩展来获取你的日期组件:

extension NSDate 
    var month: Int 
        return NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!.component(.Month, fromDate: self)
    
    var year: Int 
        return NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!.component(.Year, fromDate: self)
    

然后您可以轻松地过滤您的日期如下:

class  Observation 
    var date = NSDate()
    var value = String()
    init(date: NSDate, value: String) 
        self.date = date
        self.value = value
    


let ob1 = Observation(date: NSDate(), value: "Testing")

let observationList = [ob1]

let filteredList = observationList.filter() $0.date.year == 2015 && $0.date.month == 12 

print(filteredList.first?.value ?? "")   // Testing

【讨论】:

以上是关于如何快速获取一个月的对象的主要内容,如果未能解决你的问题,请参考以下文章

js获取一个月的天数

js如何获取一个月的天数 data javascript

如何在SQL中获取当前日期最近六个月的前一个月数据

如何使用 shell/perl 脚本获取一个月的第二个星期六? [关闭]

如何使用月份名称获取最近 3 个月的计数,如果该月份没有记录需要使用月份名称获取 0 [重复]

java 代码如何获取当前时间的上一个月的月末时间..