Saltar al contenido

¿Obtener el primer y último día del mes actual en Go/Golang?

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

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *