¿Cuál es una forma inteligente de contar la cantidad de días desde X?

11

Comencé a trabajar en mi puesto actual desde el 17 de noviembre de 2014. Me gustaría saber cuántos días han corrido hasta ahora. ¿Alguna idea sobre cómo usar Linux para encontrar una solución simple y agradable?

ychaouche
fuente
Terminé haciendo algo similar en un script perl; Utilicé la función timelocal () para obtener el número de segundos desde la época hasta la fecha dada (17 de noviembre de 2014, por ejemplo), luego resté eso de la fecha-fecha-en-segundos actual, luego dividí por 86400 (segundos en un día). Estoy seguro de que alguien encontrará una solución solo para shell :)
Jeff Schaller
2
La aritmética del tiempo tiene muchos casos especiales complicados. Mientras que cosas simples como restar las marcas de tiempo de UNIX y dividir por 86,400 le darán una respuesta aproximada, es mejor que use una biblioteca de tiempo especializada que tenga en cuenta los casos especiales, por ejemplo Python dateutil.
Reid
1
Algunas de las respuestas en Calcular rápidamente las diferencias de fechas también pueden ayudar aquí.
manatwork
@ msh210 está prohibido de por vida y condenado a prisión por 1 mes mientras sirve a la comunidad como limpiador de código para el antiguo código COBOL.
ychaouche

Respuestas:

14
echo $(( (`date +%s` - `date +%s -d '2014/11/17'`) / 86400 )) days ago
wurtel
fuente
44
Esto da un salto de segundos equivocado. Es decir, que casi no importa ahora , pero en 10k años más o menos el error acumulado podría ser suficiente a la materia.
Kevin
2
Los segundos de probabilidad de salto provocarán un error de aproximadamente .000001%. Esto es insignificante en comparación con el número incorrecto de días que este método proporcionará con los lugares donde se observa el horario de verano: 2% de los casos ...
jlliagre
2
@Kevin: Si quiere saber cuántos días trabajó en algún lugar, podemos (hasta más avance en criogenización o medicina) no preocuparnos demasiado por esto ^^
Olivier Dulac
1
@jlliagre:% s es el tiempo de Unix, que siempre es UTC, que carece de horario de verano.
Kevin
1
Lo más probable es que se esté preguntando sobre la cantidad de días empleados mientras está inactivo detrás de su escritorio en el trabajo. Como probablemente no sea alrededor de la medianoche, sino entre las 8 a.m. y las 5 p.m. (y date -d 2014/11/17da una marca de tiempo de la medianoche, ya que no se menciona el tiempo), el horario de verano no importa.
wurtel
5

Bueno, a primera vista:

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

En un script (no muy eficiente, pero ... ¿tal vez maneja los segundos bisiestos?;))

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
fuente
Even agose entiende:date --date="239 days ago"
Trauma digital
1
@DigitalTrauma es una pena que no esté localizado. Por ejemplo, LC_ALL=ru_RU.utf8 date --date="239 дней назад"me da el mismo resultado que date --date="239".
Ruslan
@Ruslan hecho :)
Digital Trauma
1

Intenté Python en la línea de comando.

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

Aquí hay un ejemplo con PHP:

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

Resultado:

days: 1927

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

Steven Penny
fuente