Ich möchte Datumsbereiche gruppiert nach Tag aus 2 Zeitintervallen extrahieren. Für exemple, ab:Auszugszeiträume gruppiert nach Tag aus Zeitintervallen
let startDateTimeInterval: NSTimeInterval = 1462060790 // "2016-04-30 23:59:50 +0000\n"
let endDateTimeInterval: NSTimeInterval = 1462183200 // "2016-05-02 00:00:10 +0000\n"
möchte ich erhalten:
9 seconds // "[2016-04-30 23:59:50 => 2016-04-30 23:59:59]
86399 seconds // "[2016-05-01 00:00:00 => 2016-05-01 23:59:59]
10 seconds // "[2016-05-02 00:00:00 => 2016-05-01 00:09:59]
ich es erreicht, aber ich frage mich, ob es eine schönere Lösung ist. Meine Methode ist:
1- Create NSDate from startDateTimeInterval
2- Create NSDate for end of day (23:59:59) from startDate (previous step)
3- Get difference between these 2 dates.
4- increment startDateTimeInterval with difference in seconds (previous step) and go back to step 1 with updated startDateTimeInterval.
Repeat steps while startDate < endDate
Hier ist mein Code:
func createItemsPerDay(startDateTimeInterval: NSTimeInterval, endDateTimeInterval: NSTimeInterval)
{
var currentTimeInterval = startDateTimeInterval
let currentDate = NSDate(timeIntervalSince1970: currentTimeInterval)
var currentDateEndOfDay = currentDate.endOfDay(NSTimeZone(forSecondsFromGMT: 0))
if (currentDateEndOfDay.timeIntervalSince1970 > endDateTimeInterval) {
currentDateEndOfDay = NSDate(timeIntervalSince1970: endDateTimeInterval)
}
let numberOfElapsedSecondsForEvent = currentDateEndOfDay.timeIntervalSinceDate(currentDate)
print("event: \(numberOfElapsedSecondsForEvent) seconds")
currentTimeInterval += (numberOfElapsedSecondsForEvent + 1)
if (currentTimeInterval < endDateTimeInterval) {
createItemsPerDay(startDateTimeInterval: currentTimeInterval, endDateTimeInterval: endDateTimeInterval)
}
}
Haben Sie einen Vorschlag?
Danke!
Ihre Beispiel Eingabeparameter überprüfen, das Ende Zeitstempel entspricht nicht die Datum im Kommentar. Auch sollte das erste Intervall eigentlich 10 Sekunden sein, nicht 9 (der Tag endet am 24:00:00 und nicht am 23:59:59, weil 23: 59: 59.999 noch heute ist). – werediver
Danke @werediver Ich habe meine Frage bearbeitet. Die Frage ist jetzt, wenn ein Tag zu Ende ist. Mehrere Posts auf SO zeigen 23:59:59 ... – thierryb
Dann 23: 59: 59.001 ist der nächste Tag? Das macht keinen Sinn für mich. – werediver