go - vehiculos - tag renewal online
Añadir días hasta la fecha en Go (2)
Necesita convertir weeksToAdd
para weeksToAdd
en un time.Duration
. time.Duration
:
myDate.Add(time.Hour * 24 * 7 * time.Duration(weeksToAdd))
En Go, los alias de tipo no se pueden usar indistintamente aunque el tiempo. La time.Duration
es técnicamente un int64
.
Además, aquí, aunque las constantes numéricas 24 y 7 no están escritas explícitamente, todavía se pueden usar como están, consulte https://blog.golang.org/constants para obtener una explicación detallada.
Consulte http://play.golang.org/p/86TFFlixWj para ver un ejemplo en ejecución.
Como se mencionó en los comentarios y otra respuesta, el uso de time.AddDate()
es preferible a time.Add()
cuando se trabaja en una duración superior a 24 horas, ya que time.Duration
básicamente representa nanosegundos. Cuando se trabaja con días, semanas, meses y años, se debe tener mucho cuidado debido a cosas como el horario de verano, los años bisiestos y, posiblemente, los segundos de salto.
La documentación para time.Duration
type y las constantes asociadas que representan unidades enfatizan este problema ( https://golang.org/pkg/time/#Duration ):
No existe una definición de unidades de Día o más para evitar confusiones en las transiciones de la zona horaria del horario de verano.
Estoy intentando agregar un número de días (en realidad, un número de semanas) a una fecha existente en Ir. He intentado myDate.Add(time.Hour * 24 * 7 * weeksToAdd)
Pero me sale un error cuando intento compilar: invalid operation: time.Hour * startAdd (mismatched types time.Duration and float64)
Entonces weeksToAdd
es actualmente un float64
, pero puedo cambiarlo a un int o lo que sea. Cambiarlo a un int solo cambió mi error para decir que int
y Duration
no se pueden multiplicar.
¿Cómo agrego días a una fecha?
Use Time.AddDate()
:
myDate.AddDate(0, 0, 7 * weeksToAdd)