Solusi 1:
ring0 mengalahkan saya beberapa detik, tetapi perintah lengkapnya adalah:
echo $(($(date --utc --date "$1" +%s)/86400))
Ini berjalan dengan waktu UTC. Hasil:
[email protected]:~# echo $((`date --utc --date "$1" +%s`/86400))
14984
Pemeriksaan cepat dengan WolframAlpha menunjukkan bahwa ini adalah nilai yang benar.
Solusi 2:
Saya pikir ini adalah metode paling sederhana:
expr $(date +%s) / 86400
Solusi 3:
date
perintah dapat memberi Anda jumlah detik sejak 1970-01-01 00:00:00 UTC
.
date +"%s"
Anda dapat membagi hasilnya dengan 3600*24
untuk mendapatkan jumlah hari (UTC).
Misalnya. di Bash
x=`date +"%s"` ; echo $(( $x / 3600 / 24 ))
untuk menampilkan jumlah hari.
Solusi 4:
Saya perlu menyelesaikan ini juga, tetapi saya ingin mendapatkan nilai yang sama untuk hari# terlepas dari waktu. Dengan pendekatan seperti yang ditampilkan di sini, nilainya akan berubah pada tengah malam UTC, bukan tengah malam waktu setempat. Ini mungkin tampak kurang menjadi masalah di UE atau Pantai Timur AS, yang cukup dekat dengan UTC sehingga nilai hari tidak akan berubah di tengah hari kerja biasa, tetapi di, misalnya, California, hari berubah akan terjadi pada pukul 16:00 PST, yang mungkin merepotkan. Saya membayangkan orang Australia akan sangat kesal jika nilai hari berubah di pagi hari.
Jika kita ingin memperbaikinya, kita perlu menambahkan offset dari UTC sebelum membaginya dengan detik/hari. Untungnya, perintah tanggal Linux menyertakan %z urutan format yang melaporkan offset dari UTC. Sedangkan format standar (hasil ini untuk waktu Denver, MDT):
$ date +%z
-0600
. . . tidak langsung dapat digunakan dalam perhitungan, pengubah yang tepat akan menghasilkan apa yang kita inginkan:
$ date +%-:::z
-6
Gabungkan itu dengan konversi detik/jam/hari biasa, dan saya yakin yang berikut ini akan menampilkan hari sejak 1/1/1970, dengan 1/1/1970 itu sendiri menjadi hari nol, dan nilainya bertambah pada tengah malam waktu setempat:
echo $(( ( $(date +"%s + ( %-:::z * 3600)") ) / 86400 ))
Penghitungan sederhana ini tidak akan berfungsi untuk zona waktu yang tidak diimbangi dari UTC per jam penuh (mis., India, TZ=Asia/Kolkata), karena "+5:30" dihasilkan oleh date +%-:::z
akan menghasilkan kesalahan "karakter tidak valid dalam ekspresi" bila digunakan dalam pernyataan di atas.