Quelle est une façon intelligente de compter le nombre de jours écoulés depuis X?

11

J'ai commencé à travailler à mon poste actuel depuis le 17 novembre 2014. Je voudrais savoir combien de jours se sont écoulés jusqu'à maintenant. Des idées sur la façon d'utiliser Linux pour trouver une solution simple et agréable?

ychaouche
la source
J'ai fini par faire quelque chose de similaire dans un script perl; J'ai utilisé la fonction timelocal () pour obtenir le nombre de secondes de l'époque à la date donnée (17 novembre 2014 par exemple), puis je l'ai soustrait de l'époque actuelle en secondes, puis divisé par 86400 (secondes en un jour). Je suis sûr que quelqu'un trouvera une solution shell uniquement :)
Jeff Schaller
2
L'arithmétique du temps a beaucoup de cas spéciaux délicats. Alors que des choses simples comme la soustraction d'horodatages UNIX et la division par 86 400 vous donneront une réponse approximative, il vaut mieux utiliser une bibliothèque de temps spécialisée qui prend en compte les cas spéciaux, par exemple Python dateutil.
Reid
1
Certaines des réponses dans Calculer rapidement les différences de date peuvent également aider ici.
manatwork
@ msh210 vous êtes banni à perpétuité et condamné à 1 mois de prison en servant la communauté comme nettoyeur de code pour l'ancien code COBOL.
ychaouche

Réponses:

14
echo $(( (`date +%s` - `date +%s -d '2014/11/17'`) / 86400 )) days ago
gémir
la source
4
Cela se trompe en secondes intercalaires. Je veux dire, cela n'a plus vraiment d' importance maintenant , mais dans 10 000 ans environ, l'erreur accumulée pourrait suffire.
Kevin
2
Les secondes intercalaires de probabilité déclencheront une erreur d'environ .000001%. C'est négligeable par rapport au mauvais nombre de jours que cette méthode donnera avec des lieux où l'heure d'été est observée: 2% des cas ...
jlliagre
2
@Kevin: S'il veut savoir combien de jours il a travaillé quelque part, nous pouvons (jusqu'à de nouveaux progrès dans la cryogénisation ou la médecine) ne pas trop nous en préoccuper ^^
Olivier Dulac
1
@jlliagre:% s est le temps Unix, qui est toujours UTC, qui manque DST.
Kevin
1
Il est probable qu'il s'interrogera sur le nombre de jours de travail au ralenti derrière son bureau au travail. Comme ce n'est probablement pas vers minuit mais entre 8h et 17h (et date -d 2014/11/17donne un horodatage de minuit car il n'y a pas d'heure), l'heure d'été n'a pas d'importance.
wurtel
5

Eh bien, à première vue:

$ date --date="-239 days"
Mon Nov 17 15:25:40 CET 2014

Dans un script (pas très efficace, mais ... peut-être qu'il gère les secondes intercalaires?;))

i=0
result=""
while [ "$result" != "20141117" ]
do
    i=$((i+1))
    result=$(date --date="-$i days" +%Y%m%d)
done
echo "$i" days have passed since "$result"
frostschutz
la source
Même agoest compris:date --date="239 days ago"
Digital Trauma
1
@DigitalTrauma dommage qu'il ne soit pas localisé. Par exemple, LC_ALL=ru_RU.utf8 date --date="239 дней назад"me donne le même résultat que date --date="239".
Ruslan
@Ruslan en effet :)
Digital Trauma
1

J'ai essayé python sur la ligne de commande.

$ python -c "import datetime; print datetime.date.today() - datetime.date(2014,11,17)"
246 days, 0:00:00 
ychaouche
la source
1

Voici un exemple avec PHP:

<?php
$o1 = date_create('2014-11-17');
$o2 = date_create();
$o3 = date_diff($o2, $o1);
echo 'days: ', $o3->days, "\n";

Résultat:

days: 1927

https://php.net/function.date-diff

Steven Penny
la source