Al fin después de mucho luchar hemos encontrado la respuesta de esta contratiempo que algunos los lectores de este espacio presentan. Si tienes algo que compartir puedes compartir tu comentario.
Solución:
time.Month
es un tipo, no un valor, por lo que no puede Add
eso. Además, su lógica es incorrecta porque si agrega un mes y resta un día, no obtiene el final del mes, obtiene algo a mediados del próximo mes. Si hoy es 24 de abril, obtendrás el 23 de mayo.
El siguiente código hará lo que estás buscando:
package main
import (
"time"
"fmt"
)
func main()
now := time.Now()
currentYear, currentMonth, _ := now.Date()
currentLocation := now.Location()
firstOfMonth := time.Date(currentYear, currentMonth, 1, 0, 0, 0, 0, currentLocation)
lastOfMonth := firstOfMonth.AddDate(0, 1, -1)
fmt.Println(firstOfMonth)
fmt.Println(lastOfMonth)
Enlace del patio de recreo
La respuesta de @Apin es peligrosa porque el ahora lib hace muchas suposiciones incorrectas (me mordió en el pie también).
Now lib no considera los horarios de verano y muchas otras cosas: https://github.com/jinzhu/now/issues/13
Así es como lo estoy haciendo:
t := time.Now()
firstday := time.Date(t.Year(), t.Month(), 1, 0, 0, 0, 0, time.Local)
lastday := firstday.AddDate(0, 1, 0).Add(time.Nanosecond * -1)
Puedes usar ahora biblioteca, es realmente simple:
now.BeginningOfMonth() // 2013-11-01 00:00:00 Fri
now.EndOfMonth() // 2013-11-30 23:59:59.999999999 Sat
Eche un vistazo aquí para obtener más detalles: https://github.com/jinzhu/now