Apa cara cerdas untuk menghitung jumlah hari sejak X?

11

Saya mulai bekerja di posisi saya saat ini sejak 17 November 2014. Saya ingin tahu berapa hari telah berjalan hingga sekarang. Adakah ide tentang cara menggunakan Linux untuk menghasilkan solusi yang sederhana dan menyenangkan?

ychaouche
sumber
Saya akhirnya melakukan sesuatu yang mirip dalam skrip perl; Saya menggunakan fungsi timelocal () untuk mendapatkan jumlah detik dari zaman ke tanggal yang diberikan (17 Nov 2014 misalnya), kemudian mengurangkannya dari zaman saat-tanggal-dalam-detik, kemudian dibagi dengan 86400 (detik dalam satu hari). Saya yakin seseorang akan datang dengan solusi shell-only :)
Jeff Schaller
2
Aritmatika waktu memiliki banyak kasus khusus. Sementara hal-hal sederhana seperti mengurangi cap waktu UNIX dan membaginya dengan 86.400 akan memberi Anda jawaban perkiraan, Anda lebih baik menggunakan perpustakaan waktu khusus yang memperhitungkan kasus-kasus khusus, misalnya Python dateutil.
Reid
1
Beberapa jawaban di Cepat menghitung perbedaan tanggal dapat membantu di sini juga.
manatwork
@ msh210 Anda dilarang seumur hidup dan dijatuhi hukuman penjara selama 1 bulan sementara melayani komunitas sebagai pembersih kode untuk kode COBOL kuno.
ychaouche

Jawaban:

14
echo $(( (`date +%s` - `date +%s -d '2014/11/17'`) / 86400 )) days ago
Wurtel
sumber
4
Ini salah melompat detik. Maksudku, itu tidak penting sekarang , tetapi dalam 10k tahun atau lebih kesalahan yang terakumulasi bisa cukup menjadi masalah.
Kevin
2
Probabilitas detik kabisat akan memicu kesalahan sekitar 0,000001%. Ini dapat diabaikan dibandingkan dengan jumlah hari yang salah metode ini akan berikan dengan lokal di mana waktu musim panas diamati: 2% dari kasus ...
jlliagre
2
@Kevin: Jika dia ingin tahu berapa hari dia bekerja di suatu tempat, kita dapat (sampai lebih lanjut dalam cryogenisation atau obat-obatan) tidak terlalu peduli dengan hal ini ^^
Olivier Dulac
1
@ jlliagre:% s adalah waktu Unix, yang selalu UTC, yang tidak memiliki DST.
Kevin
1
Kemungkinannya adalah dia akan bertanya-tanya tentang berapa hari dipekerjakan sambil menganggur di belakang mejanya di tempat kerja. Karena itu mungkin bukan sekitar tengah malam tetapi di suatu tempat antara 8 pagi dan 5 sore (dan date -d 2014/11/17memberikan stempel waktu tengah malam karena tidak ada waktu yang disebutkan) DST tidak masalah.
Wurtel
5

Nah, di muka itu:

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

Dalam sebuah skrip (tidak terlalu efisien, tapi ... mungkin ia menangani detik kabisat?;))

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
sumber
Bahkan agodipahami:date --date="239 days ago"
Trauma Digital
1
@DigitalTrauma sayang sekali tidak terlokalisasi. Misalnya LC_ALL=ru_RU.utf8 date --date="239 дней назад"memberi saya hasil yang sama dengan date --date="239".
Ruslan
@Ruslan memang :)
Digital Trauma
1

Saya mencoba python di baris perintah.

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

Berikut ini adalah contoh dengan PHP:

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

Hasil:

days: 1927

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

Steven Penny
sumber