Comando DATE en bash: sumar y restar años, días o meses a la fecha actual

El comando date, a través del parámetro -d, --date=STRING permite mostrar y calcular la fecha distinta a la actual a partir de la suma o resta de X años, meses, días, minutos o segundos. Esto es útil cuando queremos por ejemplo añadir o restar 7 días a la fecha actual. Vamos a ver unos cuantos ejemplos:

Sumar 7 días a la fecha actual y mostrarlo en formato estándar:

$ date --date='+7 day'
vie may 13 17:40:47 CEST 2011

Restar 7 días a la fecha actual y mostrarlo en formato timestamp:

$ date +%s --date='-7 day'
1304091656

Sumar un año a la fecha actual con formato de fecha y hora:

$ date +%c --date='+1 year'
dom 06 may 2012 17:41:53 CEST

Restar dos meses a la fecha actual:

$ date --date='-2 month'
dom mar  6 16:42:48 CET 2011

Y así muchos más ejemplos. Seguro que os resulta muy útil dentro de scripts en bash por ejemplo.

16 comentarios en “Comando DATE en bash: sumar y restar años, días o meses a la fecha actual

  1. Hola!
    Y cómo guardas en una variable lo que extraes de por ejemplo $ date +%s –date=’-7 day’ ¿?

    Gracias!

    • O si quieres mostrar guiones esta otra forma te podrá valer (seguramente se pueda simplificar).
      date +%x –date=’-1 day’ | sed -e ‘s/\//-/g’

    • Efectivamente con cualquier fecha siempre y cuando se le especifique el formato correcto

  2. como saber los días que han pasado o van a tener teniendo dos fechas, por ejemplo cuantos días o semanas han pasado desde el 01 abril de este año hasta la fecha hoy?

  3. Como puedo hacer para restar dos tiempos, es decir, al inicio de un proceso capturo el tiempo T1 del sistema, y al finalizar el mismo capturo el tiempo T2. Como hago para restar el T2-T1 y mostrar el tiempo de ejecucion de dicho proceso, sin condicionar mucho las variables ya que actualmente lo realizo de esta manera:
    #T1
    S1=»$(date ‘+%S’)»
    M1=»$(date ‘+%M’)»
    H1=»$(date ‘+%H’)»
    .
    .
    #T2
    S2=»$(date ‘+%S’)»
    M2=»$(date ‘+%M’)»
    H2=»$(date ‘+%H’)»

    Y al realizar la resta, resulta que tengo que aplicar muchas condiciones. Cual seria una manera directa de hacerlo?

    • Guarda tus tiempos en 2 variables pásalas a segundos y restalas, a mi me funcionado.

      DIFERENCIA=$(( ($(date –date «20131102» +%s) – $(date –date «20131004» +%s) )/(60*60*24) ))
      echo «Diferencia: $DIFERENCIA»

      Saludos y éxito :)

  4. hay algun script para que se pueda restar a las tiempo en horas y minutos

    tengo que hacer que cada 3 minutos antes de la hora del sistema se valide un if,
    pero surge el problema cuando la hora esta en punto 4:00 ya que tengo que hacer un if validando que cada que sea una hora en punto se reste -1 a la hora y -3 a los minutos.
    quiero saber si hay algún script para realizar eso y no hacer tanto desastre con los if

    las horas y minutos los estoy poniendo en una variable para poder restar cada uno por separado

  5. Por que me esta arrojando este error, ya tenia un año usando las siguientes variables, y apenas ayer día 8 me comenzó el problema.

    VARIABLES:
    primer_dia=`date –date «-$(($(date +%d) -1)) days – 1 month» +%Y-%m-%d`
    ultimo_dia=`date –date «-$(($(date +%d) -1)) days -1 days» +%Y-%m-%d`

    ERROR:
    -bash: 09: valor demasiado grande para la base (el elemento de error es «09»)

    DIstribucion CENTOS7

  6. Hola,
    Y si quieres indicarle el numero a sumar a la fecha en una variable?
    NUM=5

    DIA5=`date –date=’+$NUM day’`

    SI pongo esto me falla pero es que la variable NUM ira creciendo o disminuyendo porque será un bucle.
    Gracias.

Comments are closed.