2016-06-07 7 views
7

C'è un modo, in go, per iterare su un mese specifico e ottenere tutti gli oggetti da esso?golang: C'è un modo per scorrere su specifici mese o settimana

Per esempio iterare rispetto ad aprile si tradurrà in 04012016 fino 04312016:

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

(Attualmente il codice di cui sopra non funziona, ovviamente).

Oppure, se non fa parte della libreria standard, esiste una libreria di terze parti che equivale a moment.js?

+0

Ecco un pacchetto data che può essere utile per questo: https://github.com/aodin/date – MarsAndBack

risposta

14

Non esiste un oggetto time.Date definito nella libreria standard. Solo tempo. Oggetto temporale. C'è anche un modo per variare ciclo di loro, ma li loop manualmente è abbastanza semplice:

// 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

Grazie questo è un buona soluzione per me! Basta notare che la terza parte del ciclo for dovrebbe avere un assegnamento a d - d = d.AddDate (0, 0, 1). A meno che non rimarrai bloccato in un loop infinito. – Shikloshi

+3

Chiudi ma non lo farà. 'First Parse()' restituisce due valori, quindi è necessario eseguire minimamente 'start, _: = time.Parse (" 2006-1-2 "," 2016-4-1 ")' e ovviamente in realtà si vuoi gestire e non scartare un errore. Secondo 'AddDate()' restituisce un tempo. Tempo, quindi per usarlo per incrementare il valore di d si dovrebbe scrivere 'for d: = start; d.Month() == start.Month(); d = d.AddDate (0, 0, 1) ' – Snowman

+1

Hai ragione, ovviamente. Dovrei essere più attento. Ad ogni modo ho modificato la risposta in modo che funzioni ora. – jussius

Problemi correlati