A menudo quiero hacer algunos cálculos rápidos de fechas, como:
- ¿Cuál es la diferencia entre estas dos fechas?
- ¿Cuál es la fecha n semanas después de esta otra fecha?
Normalmente abro un calendario y cuento los días, pero creo que debería haber un programa/script que pueda usar para hacer este tipo de cálculos. ¿Alguna sugerencia?
Respuesta aceptada:
Las "n semanas después de una fecha" son fáciles con GNU date(1):
$ date -d 'now + 3 weeks'
Tue Dec 6 23:58:04 EST 2011
$ date -d 'Aug 4 + 3 weeks'
Thu Aug 25 00:00:00 EST 2011
$ date -d 'Jan 1 1982 + 11 weeks'
Fri Mar 19 00:00:00 EST 1982
No conozco una forma simple de calcular la diferencia entre dos fechas, pero puede ajustar un poco de lógica alrededor de la fecha (1) con una función de shell.
datediff() {
d1=$(date -d "$1" +%s)
d2=$(date -d "$2" +%s)
echo $(( (d1 - d2) / 86400 )) days
}
$ datediff '1 Nov' '1 Aug' # Note: answer should be 92 days but in my timezone, DST starts between the dates.
91 days
Intercambiar d1
y d2
si desea el cálculo de la fecha de otra manera, o sea un poco más elegante para que no importe. Además, en caso de que haya una transición de no horario de verano a horario de verano en el intervalo, uno de los días tendrá solo 23 horas de duración; puedes compensar agregando ½ día a la suma.
echo $(( (((d1-d2) > 0 ? (d1-d2) : (d2-d1)) + 43200) / 86400 )) days