2017-07-24 46 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

謝謝,它看起來像是有效的。我正在測試它 –