CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

pb calcul sous linux

yannick0011
yannick0011
Niveau 7
11 juillet 2013 à 16:29:18

Bonjour tout le monde,

je rencontre un problème de calcul sous linux qui pourtant parrait simple.

Voici mon code:

expiration_date=$(date +%s --date=15-jul-2013)
echo "expiration:$expiration_date"
NOW=$(date +%s)
DAYSLEFT=$((($expiration_date-$NOW)/86400))
if [ $DAYSLEFT -ge 1 ];
then
DAYSLEFT=$(($DAYSLEFT+1))
elif [ $DAYSLEFT -lt 0 ];
then
DAYSLEFT=0
fi
echo "nombre de jour restant:$DAYSLEFT"
Explication:

En gros le code permet de soustraire des dates et donner le nombre de jour restant.
J'ai une date d'expiration qui est par exemple le 15 juillet 2013. Je la soustrait par exemple à la date 10 juillet 2013 il me reste 5 jours.

Mon problème:

Dans le cas ou nous sommes par exemple le 14 juillet 2013 et que je la soustrait au 15 juillet 2013, il doit me rester 1 jour mais lorsque que le script est lancé le résultat est 0.

Pour les autres dates, cela semble fonctionner sauf quand le nombre de jour restant doit être égale a 1.

Avez vous une idée pour résoudre mon problème?

Merci d'avance

Daishi
Daishi
Niveau 10
11 juillet 2013 à 16:33:41

J'suis pas calé en code, mais tes variables peuvent bien prendre une valeur négative? :(

Caly343
Caly343
Niveau 3
11 juillet 2013 à 17:35:49

En ajoutant une condition si joursRestant == 0 ?
Sinon, va plutôt voir le forum « Programmation ». :ok:

Richard_LeHap
Richard_LeHap
Niveau 10
11 juillet 2013 à 19:42:37

Dans le cas ou nous sommes par exemple le 14 juillet 2013 et que je la soustrait au 15 juillet 2013, il doit me rester 1 jour mais lorsque que le script est lancé le résultat est 0.

C'est normal car le %s dans la commande date calcule le nombre de seconde depuis le 1970-01-01 00:00:00 PILE.

Ce qui veut dire que si on est le 11 juillet et que tu mets la date d'expiration le 12 juillet, il reste moins qu'une journée (à moins d'être à 00:00:00 le 11 juillet) parce que le 12 juillet commence à 00:00:00.

Donc en fait, si il reste moins que 24h à la date d'expiration, c'est un peu inutile de le temps restant en jour.

Je viens d'essayer de faire ça :d) http://pastebin.com/nkTf1Dda

Quand qu'il reste moins que 24h, ça te donne le temps restant en heure, et quand qu'il reste plus que 24h (donc une journée et plus), ça te file le résultat en jour.

Je sais pas si c'est la meilleure façon de faire, mais ça semble marcher chez moi pour l'instant. :(

yannick0011
yannick0011
Niveau 7
13 juillet 2013 à 00:47:49

merci d'avoir répondu :) , effectivement je me suis rendu compte que le +%s ajouter également la notion du temps HH:MM:SS du coup j'ai fait converti le temps en seconde en mettant une date avec comme "heure" 00:00:0. et la ça fonctionne,et d’ailleurs le code est plus cours. après niveau optimisation je ne sais pas si c'est le meilleur.

voila le code si ça peut aider quelqu'un :

expiration_date=$(date +%s --date=15-jul-2013)
date_sans_heure=$(date +%D)
NOW=$(date +%s --date="$date_sans_heure")
DAYSLEFT=$((($expiration_date-$NOW)/86400))

K-L-K
K-L-K
Niveau 10
13 juillet 2013 à 13:43:48

ce n'est qu'une suggestion après a toi de voir.

%D te donnera la date ainsi :
mm/jj/aa soit 07/13/13 et donc en calcul...

tu devrais utiliser une fonction plus personnel comme `date +%m%d%Y`

il te sera plus facile de calculer un nombre sans les "/" tel que 071313 ou 07132013 et mieux encore de l'écrire ainsi aammjj soit :
date +%Y%m%d

%Y = 2013
%y = 13 (les deux derniers chiffres de l'année)

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment