Unix - Restar DIAS a la fecha actual en un Script

 
Vista:

Restar DIAS a la fecha actual en un Script

Publicado por Morena (1 intervención) el 21/09/2005 15:45:32
Hola .. desde un shell script necesito restarle 7 dias a la fecha actual que la estoy tomando con date +%y%m%d
Alguien tiene idea como puedo solucionar esto??? Desde ya muchas gracias a las respuestas que puedan venir!!!
Saludos...More
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
1
Responder

RE:Restar DIAS a la fecha actual en un Script

Publicado por Fernando Pena (69 intervenciones) el 23/09/2005 13:41:10
Este script lo hice para restar 2 fechas (FECHA1 - FECHA2) que aquí aparecen como variables....podrían ser parámetros posicionales.
No es exactamente lo que quieres pero por aquí van los tiros.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# ------------------------------------------------#
#  Definicion de la funcion "juliano"             #
#                                                 #
#  -( Convierte una fecha a dias de la era ) -    #
# ------------------------------------------------#
 
juliano()
{
F1=$FECHA;     A1=`echo $F1 | cut -d"-" -f1`;
               M1=`echo $F1 | cut -d"-" -f2`;
               D1=`echo $F1 | cut -d"-" -f3`;
echo "$A1*365.25\n quit" > operacion.tmp
DA=`bc operacion.tmp`    # DA : Año expresado en Dias             
 
# Calcular los DIAS TRANSCURRIDOS DESDE PRINCIPIO DE AÑO HASTA EL MES 
# - ( los dias varian si el año es bisiesto ) -
 
     echo "$A1%4\n quit" > operacion.tmp
     RESTO=`bc operacion.tmp`
     M1=`expr $M1 \- 1`   # Resto 1 mes : luego sumare los dias
 
     if [ $RESTO = 0 ]
       then
          #   Es año bisiesto
 
          case $M1 in
     		"00"| "0") DT1=0  ;;
     		"01"| "1") DT1=31 ;;
     		"02"| "2") DT1=60 ;;
     		"03"| "3") DT1=91 ;;
     		"04"| "4") DT1=121;;
     		"05"| "5") DT1=152;;
     		"06"| "6") DT1=182;;
     		"07"| "7") DT1=213;;
     		"08"| "8") DT1=244;;
     		"09"| "9") DT1=274;;
     		"10")      DT1=305;;
     		"11")      DT1=335;;
     		"12")      DT1=366;;
         esac
      else
          case $M1 in
     		"00"| "0") DT1=0  ;;
     		"01"| "1") DT1=31 ;;
     		"02"| "2") DT1=59 ;;
     		"03"| "3") DT1=90 ;;
     		"04"| "4") DT1=120;;
     		"05"| "5") DT1=151;;
     		"06"| "6") DT1=181;;
     		"07"| "7") DT1=212;;
     		"08"| "8") DT1=243;;
     		"09"| "9") DT1=273;;
     		"10")      DT1=304;;
     		"11")      DT1=334;;
     		"12")      DT1=365;;
         esac
      fi
 
DT1=`expr $DT1 + $D1`
 
# Sumando DA obtenemos el dia de la era para la fecha        
 
echo "$DT1+$DA\nquit" > operacion.tmp
DT1=`bc operacion.tmp`
 
return
}
 
 
# --- Inicio --------------------------------------------------#
#
#  Aquí empieza el programa. FECHA1 y FECHA2 podrían ser parámetros
#  posicionales.
#
#
 
FECHA1=2005-01-26
FECHA2=2005-03-26
FECHA=$FECHA1 ; juliano ; DIAS_FECHA1=$DT1
FECHA=$FECHA2 ; juliano ; DIAS_FECHA2=$DT1
 
echo "$DIAS_FECHA1 - $DIAS_FECHA2\nquit" > operacion.tmp
DIF=`bc operacion.tmp`
 
if [ $DIF -lt 0 ]
   then
        echo "$DIF*-1\nquit" > operacion.tmp
        DIF=`bc operacion.tmp`
fi
echo "La diferencia entre ambas fechas es de $DIF dias"
 
rm operacion.tmp
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Restar DIAS a la fecha actual en un Script

Publicado por webte (1 intervención) el 31/10/2005 13:31:53
Seguro que ya lo tienes solucionado, pero por si acaso te lo envío.
Este código es para hacer lanzamientos semanales de un proceso al que se le pasan las fechas del lunes y del domingo de la semana anterior:
Concidiría con el case (1), en el que se restan exactamente siete días si el lanzamiento lo hacemos un lunes.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# Desde el lunes hasta domingo de la semana anterior
Dia_Ini=`date +%d`;
Mes_Ini=`date +%m`;
Anyo_Ini=`date +%Y`;
 
Dia_Semana=`date +%w`;
case $Dia_Semana in
     1) Dia_Ini=`expr $Dia_Ini - 7`;;
     2) Dia_Ini=`expr $Dia_Ini - 8`;;
     3) Dia_Ini=`expr $Dia_Ini - 9`;;
     4) Dia_Ini=`expr $Dia_Ini - 10`;;
     5) Dia_Ini=`expr $Dia_Ini - 11`;;
     6) Dia_Ini=`expr $Dia_Ini - 12`;;
     7) Dia_Ini=`expr $Dia_Ini - 13`;;
esac;
 
if [ $Dia_Ini -le 0 ]
then
     if [ $Mes_Ini -gt 1 ]
     then
          Mes_Ini=`expr $Mes_Ini - 1`;
     else
          Mes_Ini=12;
          Anyo_Ini=`expr $Anyo_Ini - 1`;
     fi;
fi;
 
# Calcular final de mes: Dia_Fin_Mes
case $Mes_Ini in
	01)	Dia_Fin_Mes=31;;
	03)	Dia_Fin_Mes=31;;
	04)	Dia_Fin_Mes=30;;
	05)	Dia_Fin_Mes=31;;
	06)	Dia_Fin_Mes=30;;
	07)	Dia_Fin_Mes=31;;
	08)	Dia_Fin_Mes=31;;
	09)	Dia_Fin_Mes=30;;
	10)	Dia_Fin_Mes=31;;
	11)	Dia_Fin_Mes=30;;
	12)	Dia_Fin_Mes=31;;
esac;
 
# Tratamiento especial para el mes de Febrero
# (Multiplo de 4 y no multiplo de 100) o multiplo de 400
if [ $Mes_Ini = 02 ]
then
	Bisiesto=`expr $Anyo_Ini % 4`;
	if [ $Bisiesto = 0 ]
	then
		# Multiplo de 4
		Bisiesto=`expr $Anyo_Ini % 100`
		if [ $Bisiesto = 0 ]
		then
			# Multiplo de 4 y multiplo de 100
			Bisiesto = `expr Bisiesto % 400`
			if [ $Bisiesto = 0 ]
			then
				# Multiplo de 400
				Dia_Fin_Mes=29;
			else
				Dia_Fin_Mes=28;
			fi;
		else
			# Multiplo de 4 y no multiplo de 100
			Dia_Fin_Mes=29;
		fi;
	else
		Dia_Fin_Mes=28;
	fi;
fi
 
if [ $Dia_Ini -le 0 ]
then
     Dia_Ini=`expr $Dia_Fin_Mes + $Dia_Ini`;
fi;
 
Dia_Fin=`expr $Dia_Ini + 6`;
 
if [ $Dia_Fin -gt $Dia_Fin_Mes ]
then
	Dia_Fin=`expr $Dia_Fin - $Dia_Fin_Mes`;
 
	if [ $Mes_Ini = 12 ]
	then
		Mes_Fin=01;
		Anyo_Fin=`expr $Anyo_Ini + 1`;
	else
		Mes_Fin=`expr $Mes_Ini + 1`;
		Anyo_Fin=$Anyo_Ini;
	fi;
else
	Mes_Fin=$Mes_Ini;
	Anyo_Fin=$Anyo_Ini;
fi;
 
echo "FECHA INICIO: $Dia_Ini/$Mes_Ini/$Anyo_Ini"
echo "FECHA FIN : $Dia_Fin/$Mes_Fin/$Anyo_Fin"

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Restar DIAS a la fecha actual en un Script

Publicado por Jesus (1 intervención) el 29/04/2008 11:29:59
date --date '7 days ago'
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

RE:Restar DIAS a la fecha actual en un Script

Publicado por Cesar (1 intervención) el 30/05/2013 19:11:13
Aqui hay otra opcion semejante, el formateo de la salida lo puedes hacer como mas te guste:
date '+%Y/%m/%d %H:%M:%S' --date='-7 day'
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de xve
Val: 35
Ha mantenido su posición en Unix (en relación al último mes)
Gráfica de Unix

RE:Restar DIAS a la fecha actual en un Script

Publicado por xve (70 intervenciones) el 30/05/2013 20:43:55
Muy bueno Cesar...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Restar DIAS a la fecha actual en un Script

Publicado por Jackson (1 intervención) el 09/04/2015 17:34:17
Amigo tambien puedes usar este comando es muy bueno

dt=$(perl -e 'use POSIX;print strftime "%d/%m/%Y",localtime time-86400;')
echo $dt
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Restar DIAS a la fecha actual en un Script

Publicado por Hector Mauricio (1 intervención) el 20/05/2022 16:50:29
prueba con esto
date --date='-7 day' +%Y-%m-%d
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar