J'ai trouvé que la plupart étaient des réponses suggérées, mais le commutateur -d ne se trouve pas dans la date de Solaris
conandor
3
Pour l'utilisation sur Ubuntu avec la fonction de date: $ (date +% Y:% m:% d -d "il y a 1 jour"), la sortie est: 2013: 04: 21. Et si vous voulez la date 10 jours avant, vous pouvez utiliser $ (date +% Y:% m:% d -d "il y a 10 jours") ou $ (date +% Y:% m:% d -d "10 il y a jour ")
Cette fonction bash fonctionnera à la fois sous Linux et OSX. Fondamentalement, il essaie d'abord le style GNU Linux. Si cela échoue, il essaie le style OSX. Appelez-le avec un argument du nombre de jours dans le passé où vous voulez la date. Si vous ne passez aucun argument, cela suppose 0 jours. Ce code est une seule ligne, donc le copier-coller devrait fonctionner - aucune fin de ligne supposée. 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 vous avez BSD (OSX), datevous pouvez le faire comme ceci:
date -j -v-1dWedDec1415:34:14 CET 2011
Ou si vous souhaitez effectuer des calculs de date à une date arbitraire:
date -j -v-1d-f "%Y-%m-%d""2011-09-01""+%Y-%m-%d"2011-08-31
Vous devez installer la version GNU de date, disponible via le coreutilspackage, pour que cette syntaxe fonctionne sur macOS. Si vous utilisez Homebrew, vous pouvez l'installer via brew install coreutils, après quoi vous devriez pouvoir utiliser la date GNU via la gdatecommande. Voir: topbug.net/blog/2013/04/14/…
sumitsu
17
MAC OS X
Pour la date d'hier:
date -v-1d+%F
où 1d définit le jour en cours moins 1 jour. De même,
date -v-1w +% F - pour la date de la semaine précédente
#!/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 pour la correction, méthode intéressante, même si c'est un peu verbeux.
Peter Lindqvist
1
Bonjour medoix, je n'arrive pas à trouver la signification de $ {$ #}. Je sais que $ # représente le nombre d'arguments d'un script / d'une fonction. Mais je ne suis pas en mesure de comprendre cela. Veuillez aider.
Karthick S
Cela ne fonctionne pas pour le jour précédent lors du changement de mois. Par exemple aujourd'hui 1 July , 2013, le résultat en cours d'impression est 2013-6-1347, alors que le résultat attendu est2013-6-30
malavisé
Au lieu des 3 lignes entre le "fi" try "day = echo $(cal $month $year)|tr ' ' '\n'|tail -n 1"
Anton Roslov
1
Vous pouvez faire un calcul simple, enrichi d'une expression régulière, si le format de date choisi est 'AAAAMM':
echo $(($(date +"%Y%m")-1))| sed -e 's/99$/12/'
En janvier 2020, il retournera 201912 ;-) Mais, ce n'est qu'une solution de contournement, lorsque la date n'a pas d'options de calcul et d'autres options d'interpréteur de date (par exemple en utilisant perl) non disponibles ;-)
Cela se traduit par date: illegal option: -dSolaris. Votre réponse qui s'appuie sur des extensions GNU non portables de l' dateutilitaire standard POSIX pour une question sur la plate-forme Solaris non GNU.
Andrew Henle le
0
Essayez le code ci-dessous, qui s'occupe également de la partie DST.
La manipulation du fuseau horaire est possible pour changer l'horloge de quelques heures. En raison de l'heure d'été, il y a 24 heures peut être aujourd'hui ou avant-hier.
Vous êtes sûr qu'hier, c'est il y a 20 ou 30 heures. Laquelle? Eh bien, le plus récent qui n'est pas aujourd'hui.
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
Le paramètre -e utilisé dans la commande echo est nécessaire avec bash, mais ne fonctionnera pas avec ksh. Dans ksh, vous pouvez utiliser la même commande sans l'option -e.
Lorsque votre script sera utilisé dans différents environnements, vous pouvez démarrer le script avec #! / Bin / ksh ou #! / Bin / bash. Vous pouvez également remplacer le \ n par une nouvelle ligne:
echo "$(TZ=GMT+30 date +%Y-%m-%d)
$(TZ=GMT+20 date +%Y-%m-%d)"| grep -v $(date +%Y-%m-%d)| tail -1
--date
ou-d
n'est disponible qu'en date GNURéponses:
si vous avez une date GNU et que je vous ai bien compris
ou
la source
date -v-1d
sur OSX (minus),-v+1d
(plus)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 vous avez BSD (OSX),
date
vous pouvez le faire comme ceci:Ou si vous souhaitez effectuer des calculs de date à une date arbitraire:
la source
la source
date: illegal option -- -
date
, disponible via lecoreutils
package, pour que cette syntaxe fonctionne sur macOS. Si vous utilisez Homebrew, vous pouvez l'installer viabrew install coreutils
, après quoi vous devriez pouvoir utiliser la date GNU via lagdate
commande. Voir: topbug.net/blog/2013/04/14/…MAC OS X
Pour la date d'hier:
où 1d définit le jour en cours moins 1 jour. De même,
date -v-1w +% F - pour la date de la semaine précédente
date -v-1m +% F - pour la date du mois précédent
SI VOUS AVEZ LA DATE GNU,
Plus d'infos: https://www.cyberciti.biz/tips/linux-unix-get-yesterdays-tomorrows-date.html
la source
Eh bien, c'est une réponse tardive, mais cela semble fonctionner !!
la source
Guide de script Bash avancé
Pour plus de détails sur le format de la date, consultez la page de manuel pour la date
la source
Désolé de ne pas mentionner I sur le système Solaris. En tant que tel, le commutateur -date n'est pas disponible sur Solaris bash.
Je découvre que je peux obtenir la date précédente avec un petit truc sur le fuseau horaire.
la source
bash $(TZ=America/New_York date +%Y-%m-%d)
Utiliser Perl à la place peut-être?
Ou, utilisez nawk et (ab) utilisez / usr / bin / adb:
Je suis tombé sur ça aussi ... fou!
la source
la source
Met la date d'hier au format AAAA-MM-JJ dans une variable
$yesterday
.la source
la source
1 July , 2013
, le résultat en cours d'impression est2013-6-1347
, alors que le résultat attendu est2013-6-30
echo $(cal $month $year)|tr ' ' '\n'|tail -n 1
"Vous pouvez faire un calcul simple, enrichi d'une expression régulière, si le format de date choisi est 'AAAAMM':
En janvier 2020, il retournera 201912 ;-) Mais, ce n'est qu'une solution de contournement, lorsque la date n'a pas d'options de calcul et d'autres options d'interpréteur de date (par exemple en utilisant perl) non disponibles ;-)
la source
ou
la source
date: illegal option: -d
Solaris. Votre réponse qui s'appuie sur des extensions GNU non portables de l'date
utilitaire standard POSIX pour une question sur la plate-forme Solaris non GNU.Essayez le code ci-dessous, qui s'occupe également de la partie DST.
Courtsey Ansgar Wiechers
la source
Solution compatible DST:
La manipulation du fuseau horaire est possible pour changer l'horloge de quelques heures. En raison de l'heure d'été, il y a 24 heures peut être aujourd'hui ou avant-hier.
Vous êtes sûr qu'hier, c'est il y a 20 ou 30 heures. Laquelle? Eh bien, le plus récent qui n'est pas aujourd'hui.
Le paramètre -e utilisé dans la commande echo est nécessaire avec bash, mais ne fonctionnera pas avec ksh. Dans ksh, vous pouvez utiliser la même commande sans l'option -e.
Lorsque votre script sera utilisé dans différents environnements, vous pouvez démarrer le script avec #! / Bin / ksh ou #! / Bin / bash. Vous pouvez également remplacer le \ n par une nouvelle ligne:
la source
Pas très sexy mais pourrait faire le travail:
Formé à partir de la réponse "martin clayton".
la source
la source