2016-06-07 3 views
7

Gibt es eine Möglichkeit, in go über einen bestimmten Monat zu iterieren und alle time.Date Objekte daraus zu erhalten?golang: Gibt es eine Möglichkeit, über bestimmten Monat oder Woche zu iterieren

Zum Beispiel iterieren April führt in 04012016 bis 04312016:

for _, dayInMonth := range date.April { 
    // do stuff with dates returned 
} 

(Zur Zeit der obige Code nicht offensichtlich funktionieren).

Oder, wenn nicht Teil der Standardbibliothek gibt es eine Third-Party-Bibliothek, die moment.js entspricht?

+0

hier ein Datum Paket ist, das für diese nützlich sein können: https://github.com/aodin/date – MarsAndBack

Antwort

14

Es gibt kein time.Date-Objekt, das in der Standardbibliothek definiert ist. Nur time.Time-Objekt. Es gibt auch keine Möglichkeit, Schleife reichen sie, aber sie manuell Looping ist ganz einfach:

// set the starting date (in any way you wish) 
start, err := time.Parse("2006-1-2", "2016-4-1") 
// handle error 

// set d to starting date and keep adding 1 day to it as long as month doesn't change 
for d := start; d.Month() == start.Month(); d = d.AddDate(0, 0, 1) { 
    // do stuff with d 
} 
+0

Dank dieser a Gute Lösung für mich! Beachten Sie, dass der dritte Teil der for-Schleife eine Zuweisung zu d - d = d.AddDate (0, 0, 1) haben sollte. Es sei denn, Sie werden in einer Endlosschleife stecken bleiben. – Shikloshi

+3

Schließen, aber das wird es nicht tun. 'First Parse()' gibt zwei Werte zurück, so dass Sie minimal 'start, _: = time.Parse (" 2006-1-2 "," 2016-4-1 ")' machen müssen und natürlich in der Realität normalerweise möchte einen Fehler behandeln und nicht verwerfen. Das zweite 'AddDate()' gibt eine time.Time zurück. Um es zu benutzen, um den Wert von d zu erhöhen, sollten Sie 'for d: = start; d.Monat() == start.Monat(); d = d.AddDate (0, 0, 1) ' – Snowman

+1

Du hast natürlich Recht. Ich sollte vorsichtiger sein. Wie auch immer ich die Antwort bearbeitet habe, so dass es jetzt funktioniert. – jussius

Verwandte Themen