linux + ajoutez X jours à ce jour et obtenez une nouvelle date virtuelle


115

J'ai une machine Linux (RH 5.3)

Je dois ajouter / calculer 10 jours plus la date pour obtenir une nouvelle date (date d'expiration))

par exemple

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

Donc j'ai besoin de

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

Veuillez indiquer comment calculer la nouvelle date d'expiration (avec bash, ksh ou la commande manipulate date?)

Réponses:


158

Vous pouvez simplement utiliser le -dcommutateur et fournir une date à calculer

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

C'est un outil assez puissant car vous pouvez faire des choses comme

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

ou

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

ou

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

Donc si $ end_date = 20131001 alors $ prog_end_date = 20131011


2
Je vous remercie!! Vos exemples devraient être dans la datepage d’informations GNU !
Davor Cubranic

Jamais su que je pouvais faire ça - c'est une très bonne solution.
Tim Seed le

1
+1: génial. Réponse utile.
copper.hat

1
Sous OS X, si vous utilisez la date de construction, vous recevrez une erreur. Utilisez brew install coreutilsinstaller la fonction de la date de GNU, gdate.
CousinCocaine

2
ne fonctionne pas: $ docker run -it bash bash bash-5.0# date -d "+10 days" date: invalid date '+10 days' bash-5.0#
Christian Bongiorno

37

Vous pouvez utiliser "+ x jours" comme chaîne de format:

$ date -d "+10 days"

20
$ date -v -1d

Pour obtenir une date de retour d'un jour à l'aide de la commande date:

$ date -v -1d

Il donnera (date actuelle -1) signifie 1 jour avant.

$ date -v +1d

Cela donnera (date actuelle +1) signifie 1 jour après.

De même, le code écrit ci-dessous peut être utilisé à la place de "d" pour connaître l'année, le mois, etc.

y-Year
m-Month 
w-Week 
d-Day 
H-Hour 
M-Minute  
S-Second

8
Cela fonctionne pour moi sur mon mac, mais pas sur nos serveurs Gentoo.
Mike Dotterer

Bien mieux que la réponse acceptée, cela permet de définir des formats de date arbitraires sur une seule ligne.
pferrel

9
cela ne fonctionne pas sur Ubuntu 15.10 ou RedHat 6.6. Je suppose que cela ne fonctionne pas sur RH5.3 non plus. Raison: '-v' et '-1d' ne sont pas des commutateurs valides pour 'date'
syss

2
Cela semble être une syntaxe Unix / BSD pour datelaquelle GNU date( gdatesur beaucoup de BSD) ne supporte pas. GNU dateutilise la syntaxe dans la réponse acceptée. Rappelez-vous toujours: GNU's Not Unix!
Bacon Bits

1
@BaconBits - mais si vous êtes rms, vous pouvez le dire, car beaucoup de codes GNU util ont été portés sous Linux, c'est pourquoi "Linux est GNU". Excepté, bien sûr, le fait que GNU Hurd (système d'exploitation à la fois de la FSF) était à peine une chose. Je suppose que ce qui fait chier les entreprises, c’est que pendant qu’il passait son temps à pontifier, Linus passait son temps à écrire du code - ce qui s’avère être une preuve irréfutable que vous êtes beaucoup plus susceptible de créer un logiciel fonctionnel si vous écrivez du code que si vous pontifiez. :-)
Bob Jarvis
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.