Cukup gunakan datedan percayai detik:
Seperti yang Anda tunjukkan dengan benar, banyak detail tentang perhitungan yang mendasarinya disembunyikan jika Anda mengandalkan aritmatika waktu bahasa Inggris. Misalnya -d yesterday, dan -d 1 day agoakan memiliki perilaku yang berbeda.
Sebagai gantinya, Anda dapat bergantung pada detik (didokumentasikan dengan tepat) sejak unix epoch UTC, dan bash aritmatika untuk mendapatkan momen yang Anda inginkan:
date -d @$(( $(date +"%s") - 24*3600)) +"%Y-%m-%d"
Ini ditunjukkan dalam jawaban lain . Formulir ini lebih portabel di semua platform dengan datebendera baris perintah yang berbeda , tidak tergantung pada bahasa (misalnya "kemarin" vs "hier" di lokal Prancis), dan terus terang (dalam jangka panjang) akan lebih mudah diingat, karena Anda juga sudah tahu itu. Anda mungkin terus bertanya pada diri sendiri: "Apakah itu -d 2 hours agoatau -d 2 hour agolagi?" atau "Apakah itu -d yesterdayatau -d 1 day agoyang saya inginkan?"). Satu-satunya yang sulit di sini adalah @.
Berbekal bash dan tidak ada yang lain:
Bash hanya dengan bash, Anda juga bisa mendapatkan waktu kemarin, melalui printf builtin:
%(datefmt)T
causes printf to output the date-time string resulting from using
datefmt as a format string for strftime(3). The corresponding argu‐
ment is an integer representing the number of seconds since the
epoch. Two special argument values may be used: -1 represents the
current time, and -2 represents the time the shell was invoked.
If no argument is specified, conversion behaves as if -1 had
been given.
This is an exception to the usual printf behavior.
Begitu,
# inner printf gets you the current unix time in seconds
# outer printf spits it out according to the format
printf "%(%Y-%m-%d)T\n" $(( $(printf "%(%s)T" -1) - 24*3600 ))
atau, ekuivalen dengan variabel temp (subshell luar opsional, tetapi menjaga kebersihan lingkungan).
(
now=$(printf "%(%s)T" -1);
printf "%(%Y-%m-%d)T\n" $((now - 24*3600));
)
Catatan: meskipun halaman manual menyatakan bahwa tidak ada argumen ke %()Tformatter akan menganggap default -1, saya tampaknya mendapatkan 0 sebagai gantinya (terima kasih, bash manual versi 4.3.48)