He encontrado la mayoría son como respuesta sugerida pero modificador -d no se encuentra en la fecha de Solaris
conandor
3
Para el uso en Ubuntu con la función de fecha: $ (fecha +% Y:% m:% d -d "hace 1 día"), la salida es: 2013: 04: 21. Y si desea la fecha 10 días antes, puede usar $ (fecha +% Y:% m:% d -d "hace 10 días") o $ (fecha +% Y:% m:% d -d "10 hace un día ")
Esta función bash funcionará tanto en Linux como en OSX. Básicamente, prueba el estilo GNU Linux primero. Si eso falla, prueba el estilo OSX. Llámelo con un argumento de la cantidad de días en el pasado que desea la fecha. Si no pasa ningún argumento, asume 0 días. Este código es de una sola línea, por lo que cortar y pegar debería funcionar, no se suponen finales de línea. date_days_past () { days_past=${1:-0}; if ! date -v-${days_past}d +%Y%m%d 2>/dev/null; then date --date="-${days_past} day" +%Y%m%d; fi }
Noah Spurrier
50
Si tiene BSD (OSX) datepuede hacerlo así:
date -j -v-1dWedDec1415:34:14 CET 2011
O si desea hacer cálculos de fecha en una fecha arbitraria:
date -j -v-1d-f "%Y-%m-%d""2011-09-01""+%Y-%m-%d"2011-08-31
Debe instalar la versión GNU de date, disponible a través del coreutilspaquete, para que esta sintaxis funcione en macOS. Si está utilizando Homebrew, puede instalarlo a través de brew install coreutils, después de lo cual debería poder usar la fecha GNU a través del gdatecomando. Ver: topbug.net/blog/2013/04/14/…
sumitsu
17
MAC OS X
Para la fecha de ayer:
date -v-1d+%F
donde 1d define el día actual menos 1 día. Similar,
fecha -v-1w +% F - para la fecha de la semana anterior
#!/bin/bash
OFFSET=1;eval`date "+day=%d; month=%m; year=%Y"`# Subtract offset from day, if it goes below one use 'cal'# to determine the number of days in the previous month.
day=`expr $day - $OFFSET`if[ $day -le 0];then
month=`expr $month - 1`if[ $month -eq 0];then
year=`expr $year - 1`
month=12fiset`cal $month $year`
xday=${$#}
day=`expr $xday + $day`fi
echo $year-$month-$day
+1 para corrección, método interesante, aunque es un poco detallado.
Peter Lindqvist
1
Hola medoix, no puedo encontrar el significado de $ {$ #}. Sé que $ # representa el número de argumentos para un script / función. Pero no puedo relacionarme con esto. Por favor ayuda.
Karthick S
Esto no funciona para el día anterior en el cambio de mes. Por ejemplo, hoy es 1 July , 2013, el resultado que se imprime es 2013-6-1347, mientras que el resultado esperado es2013-6-30
equivocado
En lugar de las 3 líneas entre el "fi" intente "día = echo $(cal $month $year)|tr ' ' '\n'|tail -n 1"
Anton Roslov
1
Podría hacer un cálculo simple, con una expresión regular, si el formato de fecha elegido es 'AAAAMM':
echo $(($(date +"%Y%m")-1))| sed -e 's/99$/12/'
En enero de 2020 devolverá 201912 ;-) Pero, es solo una solución, cuando la fecha no tiene opciones de cálculo y otras opciones de intérprete de fechas (por ejemplo, usar perl) no están disponibles ;-)
Eso se traduce en date: illegal option: -dSolaris. Su respuesta que se basa en extensiones GNU no portátiles a la dateutilidad estándar POSIX para una pregunta sobre la plataforma Solaris no GNU.
Andrew Henle
0
Pruebe el siguiente código, que también se encarga de la parte DST.
La manipulación de la zona horaria es posible para cambiar el reloj algunas horas. Debido al horario de verano, hace 24 horas puede ser hoy o anteayer.
Estás seguro de que ayer fue hace 20 o 30 horas. ¿Cúal? Bueno, el más reciente que no es hoy.
echo -e "$(TZ=GMT+30 date +%Y-%m-%d)\n$(TZ=GMT+20 date +%Y-%m-%d)"| grep -v $(date +%Y-%m-%d)| tail -1
El parámetro -e utilizado en el comando echo es necesario con bash, pero no funcionará con ksh. En ksh puede usar el mismo comando sin la bandera -e.
Cuando su script se utilizará en diferentes entornos, puede iniciar el script con #! / Bin / ksh o #! / Bin / bash. También puede reemplazar el \ n por una nueva línea:
echo "$(TZ=GMT+30 date +%Y-%m-%d)
$(TZ=GMT+20 date +%Y-%m-%d)"| grep -v $(date +%Y-%m-%d)| tail -1
--date
o-d
solo está disponible en la fecha GNURespuestas:
si tienes una fecha GNU y te entendí correctamente
o
fuente
date -v-1d
en OSX (menos),-v+1d
(más)date_days_past () { days_past=${1:-0}; if ! date -v-${days_past}d +%Y%m%d 2>/dev/null; then date --date="-${days_past} day" +%Y%m%d; fi }
Si tiene BSD (OSX)
date
puede hacerlo así:O si desea hacer cálculos de fecha en una fecha arbitraria:
fuente
fuente
date: illegal option -- -
date
, disponible a través delcoreutils
paquete, para que esta sintaxis funcione en macOS. Si está utilizando Homebrew, puede instalarlo a través debrew install coreutils
, después de lo cual debería poder usar la fecha GNU a través delgdate
comando. Ver: topbug.net/blog/2013/04/14/…MAC OS X
Para la fecha de ayer:
donde 1d define el día actual menos 1 día. Similar,
fecha -v-1w +% F - para la fecha de la semana anterior
fecha -v-1m +% F - para la fecha del mes anterior
SI TIENES FECHA GNU,
Más información: https://www.cyberciti.biz/tips/linux-unix-get-yesterdays-tomorrows-date.html
fuente
Bueno, esta es una respuesta tardía, ¡pero parece que funciona!
fuente
Guía avanzada de secuencias de comandos Bash
Para obtener detalles sobre el formato de fecha, consulte la página del manual para la fecha
fuente
Perdón por no mencionar I en el sistema Solaris. Como tal, el modificador -date no está disponible en Solaris bash.
Descubrí que puedo obtener la fecha anterior con un pequeño truco en la zona horaria.
fuente
bash $(TZ=America/New_York date +%Y-%m-%d)
¿Usar Perl en su lugar quizás?
O use nawk y (ab) use / usr / bin / adb:
Encontré esto también ... ¡loco!
fuente
fuente
Pone la fecha de ayer en formato AAAA-MM-DD en variable
$yesterday
.fuente
fuente
1 July , 2013
, el resultado que se imprime es2013-6-1347
, mientras que el resultado esperado es2013-6-30
echo $(cal $month $year)|tr ' ' '\n'|tail -n 1
"Podría hacer un cálculo simple, con una expresión regular, si el formato de fecha elegido es 'AAAAMM':
En enero de 2020 devolverá 201912 ;-) Pero, es solo una solución, cuando la fecha no tiene opciones de cálculo y otras opciones de intérprete de fechas (por ejemplo, usar perl) no están disponibles ;-)
fuente
o
fuente
date: illegal option: -d
Solaris. Su respuesta que se basa en extensiones GNU no portátiles a ladate
utilidad estándar POSIX para una pregunta sobre la plataforma Solaris no GNU.Pruebe el siguiente código, que también se encarga de la parte DST.
Courtsey Ansgar Wiechers
fuente
Solución consciente del horario de verano:
La manipulación de la zona horaria es posible para cambiar el reloj algunas horas. Debido al horario de verano, hace 24 horas puede ser hoy o anteayer.
Estás seguro de que ayer fue hace 20 o 30 horas. ¿Cúal? Bueno, el más reciente que no es hoy.
El parámetro -e utilizado en el comando echo es necesario con bash, pero no funcionará con ksh. En ksh puede usar el mismo comando sin la bandera -e.
Cuando su script se utilizará en diferentes entornos, puede iniciar el script con #! / Bin / ksh o #! / Bin / bash. También puede reemplazar el \ n por una nueva línea:
fuente
No es muy sexy, pero podría hacer el trabajo:
Formado a partir de la respuesta "Martin Clayton".
fuente
fuente