2017-07-24 58 views
2

我有这样迅速器阵列由日期

[ 
    { 
    "place": "somewhere", 
    "dateStart": "2017-02-25+01:00", 
    "name": "name of the event", 
    "dateEnd": "2017-06-18+02:00", 
    "region": "region 1"; 

    }, 
    { 
    "place": "another place", 
    "dateStart": "2017-03-25+01:00", 
    "name": "another name", 
    "dateEnd": "2017-08-18+02:00", 
    "region": "region 2"; 
    }, 
... 
] 

“dateStart” 和 “dateEnd” 的格式的JSON是字符串

i相swiftyjson解析它

let fileManager = FileManager.default 
     let documentsPath = try! fileManager.url(for:.documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) 
     let filePath = documentsPath.appendingPathComponent("events.json") 
     let url = filePath 
     let data = try? Data(contentsOf: url) 
     if data != nil { 
      stringJson = JSON(data: data!) 
     } 

     guard let json = stringJson.array else { return } 

我可以用以下方式过滤该阵列:

let filteredArrayByRegion = json.filter{$0["region"].string == "region name"} 

,但现在我想通过“dateEnd”过滤数组,并且我想要“dateEnd”大于“今天”的记录。

据我所知,我必须在日期转换字符串[“dateEnd”]。字符串,但我无法创建闭包来过滤数组。

任何人都可以把我放在正确的轨道上吗?

预先感谢您

+1

将字符串解析为日期,并将它们与今天进行比较。 – Alexander

+0

我尝试:'code' let dateFormatter = DateFormatter() dateFormatter.dateFormat =“yyyy-MM-dd HH:mm”然后:'code' let eventiRegionaliPerData = json.filter {json in return dateFormatter.date(from: JSON [ “eventoDataFine”。字符串!)! > = Date()} –

+0

那么问题是什么? – Alexander

回答

3

通常你会需要将日期字符串转换为Date实例,然后你可以(“现在”)的Date情况比较Date()

但是你有的字符串是可以作为字符串比较的格式。因此,您可以将今天的日期作为字符串以相同格式获取,然后将dateEnd字符串与“now”字符串进行比较。此字符串比较仅适用于特定的日期/时间格式,而您的字符串恰好处于该格式。

我假设您的dateEnd字符串中的+之后的值是时间而不是时区偏移量。现在

let formatter = DateFormatter() 
formatter.dateFormat = "yyyy-MM-dd+HH:mm" 
let nowString = formatter.string(from: Date()) 

您可以在过滤器中使用nowString

let results = someArray.filter { ($0["dateEnd"] ?? "") > nowString } 

其中someArray是你的字典的数组。

+0

谢谢,它看起来像是有效的。我正在测试它 –