我有一个像这样的json
[
{
"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”的格式为String
我用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”]。字符串,但我无法创建用于过滤数组的闭包。
有人能让我走上正轨吗?
提前谢谢
答案 0 :(得分: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
是你的字典数组。