Linux + agregue X días hasta la fecha y obtenga una nueva fecha virtual

115

Tengo una máquina Linux (RH 5.3)

Necesito agregar / calcular 10 días más la fecha para obtener una nueva fecha (fecha de vencimiento))

por ejemplo

 # date 
 Sun Sep 11 07:59:16 IST 2012

Entonces necesito conseguir

     NEW_expration_DATE = Sun Sep 21 07:59:16 IST 2012

Por favor, ¿cómo calcular la nueva fecha de vencimiento (con bash, ksh o el comando de fecha de manipulación?)

Lenin Raj Rajasekaran
fuente

Respuestas:

158

Simplemente puede usar el -dinterruptor y proporcionar una fecha para calcular

date
Sun Sep 23 08:19:56 BST 2012
NEW_expration_DATE=$(date -d "+10 days")
echo $NEW_expration_DATE
Wed Oct 3 08:12:33 BST 2012 
  -d, --date=STRING
          display time described by STRING, not now

Esta es una herramienta bastante poderosa ya que puedes hacer cosas como

date -d "Sun Sep 11 07:59:16 IST 2012+10 days"
Fri Sep 21 03:29:16 BST 2012

o

TZ=IST date -d "Sun Sep 11 07:59:16 IST 2012+10 days"
Fri Sep 21 07:59:16 IST 2012

o

prog_end_date=`date '+%C%y%m%d' -d "$end_date+10 days"`

Entonces, si $ end_date = 20131001 entonces $ prog_end_date = 20131011


fuente
2
¡¡Gracias!! ¡Tus ejemplos deberían estar en la datepágina de información de GNU !
Davor Cubranic
Nunca supe que podía hacer esto, esa es una muy buena solución.
Tim Seed
1
+1: impresionante. Respuesta útil
copper.hat
1
En OS X cuando use la fecha de incorporación, recibirá un error. Utilizar brew install coreutilspara instalar la función de la fecha de GNU, gdate.
CousinCocaine
2
no funciona: $ docker run -it bash bash bash-5.0# date -d "+10 days" date: invalid date '+10 days' bash-5.0#
Christian Bongiorno
37

Puede usar "+ x días" como cadena de formato:

$ date -d "+10 days"
quanta
fuente
20
$ date -v -1d

Para obtener la fecha de retroceso de 1 día usando el comando de fecha:

$ date -v -1d

Dará (fecha actual -1) significa 1 día antes.

$ date -v +1d

Esto dará (fecha actual +1) significa 1 día después.

De manera similar, el código escrito a continuación se puede usar en lugar de "d" para averiguar el año, mes, etc.

y-Year
m-Month 
w-Week 
d-Day 
H-Hour 
M-Minute  
S-Second
Abhilash Kumar
fuente
8
Esto funciona para mí en mi Mac, pero no en nuestros servidores Gentoo.
Mike Dotterer
Mucho mejor que la respuesta aceptada, esto permite formatos de fecha arbitrarios también en una sola línea.
pferrel
99
Esto no funciona en Ubuntu 15.10 o RedHat 6.6. Supongo que tampoco funciona en RH5.3. Motivo: '-v' y '-1d' no son modificadores válidos para 'fecha'
syss
2
Esto parece ser una sintaxis de Unix / BSD para la datecual GNU date( gdateen muchos BSD) no es compatible. GNU's dateusa la sintaxis en la respuesta aceptada. Recuerde siempre: ¡GNU no es Unix!
Bacon Bits
1
@BaconBits, pero si eres rms, puedes afirmar que debido a que se ha portado una gran cantidad de código de GNU a Linux que, por lo tanto, "Linux es GNU". Excepto, por supuesto, el hecho de que GNU Hurd (Once-And-Future-OS de FSF) es apenas una cosa. Supongo que lo que molesta es que mientras pasaba su tiempo pontificando, Linus pasó su tiempo escribiendo código, lo que resulta ser una prueba positiva de que es mucho más probable que crees un software que funcione si escribes código que si pontificas. :-)
Bob Jarvis