Qual é uma maneira inteligente de contar o número de dias desde o X?

11

Comecei a trabalhar na minha posição atual desde 17 de novembro de 2014. Gostaria de saber quantos dias se passaram até agora. Alguma idéia de como usar o Linux para encontrar uma solução simples e agradável?

ychaouche
fonte
Acabei fazendo algo semelhante em um script perl; Usei a função timelocal () para obter o número de segundos da época até a data especificada (17 de novembro de 2014, por exemplo), e subtraí a da data atual da época em segundos, dividida por 86400 (segundos em um dia). Eu tenho certeza que alguém vai chegar com uma solução apenas de shell :)
Jeff Schaller
2
A aritmética do tempo tem muitos casos especiais complicados. Enquanto coisas simples, como subtrair carimbos de data e hora do UNIX e dividir por 86.400, fornecerão uma resposta aproximada, é melhor usar uma biblioteca de horários especializada que leve em consideração casos especiais, como o Python dateutil.
Reid
1
Algumas das respostas em Calcular rapidamente as diferenças de data também podem ajudar aqui.
141315 manatwork
@ msh210 você é banido por toda a vida e sentenciado à prisão por 1 mês, enquanto serve à comunidade como limpador de código do código COBOL antigo.
precisa saber é o seguinte

Respostas:

14
echo $(( (`date +%s` - `date +%s -d '2014/11/17'`) / 86400 )) days ago
Wurtel
fonte
4
Isso leva segundos bissextos errado. Quero dizer, isso pouco importa agora , mas em 10 mil anos ou mais o erro acumulado pode ser suficiente para importar.
Kevin
2
A probabilidade de pular segundos desencadeará um erro em cerca de 0,000001%. Esta é insignificante em comparação com o número errado de dias este método vai dar com locais onde se observa o horário de verão: 2% dos casos ...
jlliagre
2
@ Kevin: Se ele quer saber quantos dias ele trabalhou em algum lugar, nós podemos (até novo avanço na cryogenisation ou medicina) não se preocupar muito com isso ^^
Olivier Dulac
1
@jlliagre:% s é hora do Unix, que é sempre UTC, que não tem horário de verão.
Kevin
1
Provavelmente, ele estará se perguntando sobre o número de dias empregados enquanto fica ocioso atrás de sua mesa no trabalho. Como provavelmente não é por volta da meia-noite, mas entre as 8h e as 17h (e date -d 2014/11/17fornece um registro de data e hora da meia-noite, pois não há horário mencionado), o horário de verão não importa.
Wurtel
5

Bem, em face disso:

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

Em um script (não muito eficiente, mas ... talvez ele lide com segundos bissextos?;))

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
fonte
Even agoé entendido:date --date="239 days ago"
Digital Trauma
1
@DigitalTrauma muito ruim, não está localizado. Por exemplo, LC_ALL=ru_RU.utf8 date --date="239 дней назад"me dá o mesmo resultado que date --date="239".
Ruslan
@Ruslan really :)
Digital Trauma
1

Eu tentei python na linha de comando.

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

Aqui está um exemplo com o 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
fonte