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.
Hola!
Y cómo guardas en una variable lo que extraes de por ejemplo $ date +%s –date=’-7 day’ ¿?
Gracias!
Pues por ejemplo:
O también:
Saludos
como le resto un día a la fecha y lo imprimo en formato dia-mes-año????
date +%x –date=’-1 day’
01/06/12
muestra la fecha en formato local
O si quieres mostrar guiones esta otra forma te podrá valer (seguramente se pueda simplificar).
date +%x –date=’-1 day’ | sed -e ‘s/\//-/g’
Más simple
date +%d-%m-%y
En la variedad de opciones está la grandeza de linux
Justo lo que necesito para una función de un nuevo script que estoy haciendo. saludos.
Esto se puede hacer con cualquier fecha ?? O solamente con la actual ?
Efectivamente con cualquier fecha siempre y cuando se le especifique el formato correcto
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?
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 :)
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
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
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.
Lo he resuelto. Gracias
Ponerlo en comillas dobles.
date –date=»+${NUM} day»