2016-06-07 12 views
7

Czy istnieje sposób, w go, na iterację w określonym miesiącu i pobranie z niej wszystkich obiektów time.Date?golang: Czy istnieje sposób iteracji w określonym miesiącu lub tygodniu?

na przykład iteracyjnego kwietnia spowoduje 0401201604312016:

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

(Obecnie powyższy kod nie będzie działać oczywiście).

A jeśli nie jest częścią standardowej biblioteki, czy istnieje biblioteka stron trzecich, która jest odpowiednikiem moment.js?

+0

Oto pakiet data, która może być przydatna dla: https://github.com/aodin/date – MarsAndBack

Odpowiedz

14

Nie ma czasu. Obiekt obiektu zdefiniowany w bibliotece standardowej. Tylko obiekt time.Time. Jest też w żaden sposób zakres pętli nich, ale je ręcznie pętli jest dość prosta:

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

Dzięki To jest dobre rozwiązanie dla mnie! Zauważ, że trzecia część pętli for powinna mieć przypisanie do d - d = d.AddDate (0, 0, 1). O ile nie utkniesz w nieskończonej pętli. – Shikloshi

+3

Zamknij, ale to się nie uda. 'First Parse()' zwraca dwie wartości, więc musisz minimalnie zrobić 'start, _: = time.Parse (" 2006-1-2 "," 2016-4-1 ")' i oczywiście w rzeczywistości zazwyczaj chcesz obsłużyć i nie odrzucać błędu. Drugi 'AddDate()' zwraca time.Time, więc aby użyć go do zwiększenia wartości d należy napisać 'dla d: = start; d.Month() == start.Month(); d = d.AddDate (0, 0, 1) ' – Snowman

+1

Masz oczywiście rację. Powinienem być bardziej ostrożny. W każdym razie zredagowałem odpowiedź, więc teraz działa. – jussius