Saya menemukan sebagian besar adalah sebagai jawaban disarankan tapi beralih -d tidak ditemukan dalam Solaris tanggal
conandor
3
Untuk penggunaan di Ubuntu dengan fungsi tanggal: $ (tanggal +% Y:% m:% d -d "1 hari yang lalu"), outputnya adalah: 2013: 04: 21. Dan jika Anda menginginkan tanggal 10 hari sebelumnya, Anda dapat menggunakan $ (tanggal +% Y:% m:% d -d "10 hari yang lalu") atau $ (tanggal +% Y:% m:% d -d "10 hari yang lalu ")
Fungsi bash ini akan berfungsi pada Linux dan OSX. Pada dasarnya ia mencoba gaya GNU Linux terlebih dahulu. Jika gagal, ia mencoba gaya OSX. Sebut saja dengan argumen jumlah hari di masa lalu yang Anda inginkan tanggalnya. Jika Anda tidak memberikan argumen, anggapannya 0 hari. Kode ini adalah satu-liner, jadi potong dan tempel harus berfungsi - tidak ada garis akhir yang diasumsikan. date_days_past () { days_past=${1:-0}; if ! date -v-${days_past}d +%Y%m%d 2>/dev/null; then date --date="-${days_past} day" +%Y%m%d; fi }
Noah Spurrier
50
Jika Anda memiliki BSD (OSX) dateAnda dapat melakukannya seperti ini:
date -j -v-1dWedDec1415:34:14 CET 2011
Atau jika Anda ingin melakukan perhitungan tanggal pada tanggal yang berubah-ubah:
date -j -v-1d-f "%Y-%m-%d""2011-09-01""+%Y-%m-%d"2011-08-31
Anda perlu menginstal versi GNU date, tersedia melalui coreutilspaket, untuk membuat sintaks ini berfungsi di macOS. Jika Anda menggunakan Homebrew, Anda dapat menginstalnya melalui brew install coreutils, setelah itu Anda harus dapat menggunakan tanggal GNU melalui gdateperintah. Lihat: topbug.net/blog/2013/04/14/…
sumitsu
17
MAC OSX
Untuk tanggal kemarin:
date -v-1d+%F
di mana 1d mendefinisikan hari ini dikurangi 1 hari. Demikian pula,
#!/bin/bash
OFFSET=1;eval`date "+day=%d; month=%m; year=%Y"`# Subtract offset from day, if it goes below one use 'cal'# to determine the number of days in the previous month.
day=`expr $day - $OFFSET`if[ $day -le 0];then
month=`expr $month - 1`if[ $month -eq 0];then
year=`expr $year - 1`
month=12fiset`cal $month $year`
xday=${$#}
day=`expr $xday + $day`fi
echo $year-$month-$day
+1 untuk koreksi, metode yang menarik, meskipun sedikit verbose.
Peter Lindqvist
1
Hai medoix, saya tidak dapat menemukan arti $ {$ #}. Saya tahu bahwa $ # berarti jumlah argumen untuk skrip / fungsi. Tetapi saya tidak dapat menghubungkannya dengan ini. Tolong bantu.
Karthick S
Ini tidak berfungsi untuk hari previus pada perubahan bulan. Misalnya hari ini 1 July , 2013, hasil yang dicetak adalah 2013-6-1347, sedangkan hasil yang diharapkan adalah2013-6-30
sesat
Alih-alih 3 baris antara "fi" coba "hari = echo $(cal $month $year)|tr ' ' '\n'|tail -n 1"
Anton Roslov
1
Anda dapat melakukan perhitungan sederhana, pimped dengan sebuah regex, jika format tanggal yang dipilih adalah 'YYYYMM':
echo $(($(date +"%Y%m")-1))| sed -e 's/99$/12/'
Pada bulan Januari tahun 2020 ia akan mengembalikan 201912 ;-) Tapi, itu hanya solusi, ketika tanggal tidak memiliki opsi perhitungan dan opsi penafsir tanggal lainnya (misalnya menggunakan perl) tidak tersedia ;-)
Itu menghasilkan date: illegal option: -dpada Solaris. Jawaban Anda yang bergantung pada ekstensi GNU non-portabel ke utilitas standar POSIXdate untuk pertanyaan tentang platform Solaris non-GNU.
Andrew Henle
0
Coba kode di bawah ini, yang juga menangani bagian DST.
Memanipulasi Zona Waktu dimungkinkan untuk mengubah jam beberapa jam. Karena waktu musim panas, 24 jam yang lalu bisa jadi hari ini atau sehari sebelum kemarin.
Anda yakin kemarin 20 atau 30 jam yang lalu. Yang mana? Nah, yang terbaru bukan hari ini.
echo -e "$(TZ=GMT+30 date +%Y-%m-%d)\n$(TZ=GMT+20 date +%Y-%m-%d)"| grep -v $(date +%Y-%m-%d)| tail -1
Parameter -e yang digunakan dalam perintah echo diperlukan dengan bash, tetapi tidak akan bekerja dengan ksh. Di ksh Anda dapat menggunakan perintah yang sama tanpa tanda -e.
Saat skrip Anda akan digunakan di lingkungan yang berbeda, Anda dapat memulai skrip dengan #! / Bin / ksh atau #! / Bin / bash. Anda juga dapat mengganti \ n dengan baris baru:
echo "$(TZ=GMT+30 date +%Y-%m-%d)
$(TZ=GMT+20 date +%Y-%m-%d)"| grep -v $(date +%Y-%m-%d)| tail -1
--date
atau-d
pilihan hanya tersedia di tanggal GNUJawaban:
jika Anda memiliki tanggal GNU dan saya mengerti Anda dengan benar
atau
sumber
date -v-1d
pada OSX (minus),-v+1d
(plus)date_days_past () { days_past=${1:-0}; if ! date -v-${days_past}d +%Y%m%d 2>/dev/null; then date --date="-${days_past} day" +%Y%m%d; fi }
Jika Anda memiliki BSD (OSX)
date
Anda dapat melakukannya seperti ini:Atau jika Anda ingin melakukan perhitungan tanggal pada tanggal yang berubah-ubah:
sumber
sumber
date: illegal option -- -
date
, tersedia melaluicoreutils
paket, untuk membuat sintaks ini berfungsi di macOS. Jika Anda menggunakan Homebrew, Anda dapat menginstalnya melaluibrew install coreutils
, setelah itu Anda harus dapat menggunakan tanggal GNU melaluigdate
perintah. Lihat: topbug.net/blog/2013/04/14/…MAC OSX
Untuk tanggal kemarin:
di mana 1d mendefinisikan hari ini dikurangi 1 hari. Demikian pula,
date -v-1w +% F - untuk tanggal minggu sebelumnya
date -v-1m +% F - untuk tanggal bulan sebelumnya
JIKA ANDA MEMILIKI GNU DATE,
Info lebih lanjut: https://www.cyberciti.biz/tips/linux-unix-get-yesterdays-tomorrows-date.html
sumber
Yah ini jawaban yang terlambat, tapi ini sepertinya berhasil !!
sumber
Panduan Script Bash Lanjutan
Untuk detail tentang format tanggal, lihat halaman manual untuk tanggal
sumber
Maaf tidak menyebutkan saya pada sistem Solaris. Karenanya, sakelar -tanggal tidak tersedia di Solaris bash.
Saya mengetahui bahwa saya bisa mendapatkan tanggal sebelumnya dengan sedikit trik di zona waktu.
sumber
bash $(TZ=America/New_York date +%Y-%m-%d)
Gunakan Perl sebagai gantinya mungkin?
Atau, gunakan nawk dan (ab) gunakan / usr / bin / adb:
Datang di ini terlalu ... gila!
sumber
sumber
Menempatkan tanggal kemarin dalam format YYYY-MM-DD ke dalam variabel
$yesterday
.sumber
sumber
1 July , 2013
, hasil yang dicetak adalah2013-6-1347
, sedangkan hasil yang diharapkan adalah2013-6-30
echo $(cal $month $year)|tr ' ' '\n'|tail -n 1
"Anda dapat melakukan perhitungan sederhana, pimped dengan sebuah regex, jika format tanggal yang dipilih adalah 'YYYYMM':
Pada bulan Januari tahun 2020 ia akan mengembalikan 201912 ;-) Tapi, itu hanya solusi, ketika tanggal tidak memiliki opsi perhitungan dan opsi penafsir tanggal lainnya (misalnya menggunakan perl) tidak tersedia ;-)
sumber
atau
sumber
date: illegal option: -d
pada Solaris. Jawaban Anda yang bergantung pada ekstensi GNU non-portabel ke utilitas standar POSIXdate
untuk pertanyaan tentang platform Solaris non-GNU.Coba kode di bawah ini, yang juga menangani bagian DST.
Courtsey Ansgar Wiechers
sumber
Solusi sadar DST:
Memanipulasi Zona Waktu dimungkinkan untuk mengubah jam beberapa jam. Karena waktu musim panas, 24 jam yang lalu bisa jadi hari ini atau sehari sebelum kemarin.
Anda yakin kemarin 20 atau 30 jam yang lalu. Yang mana? Nah, yang terbaru bukan hari ini.
Parameter -e yang digunakan dalam perintah echo diperlukan dengan bash, tetapi tidak akan bekerja dengan ksh. Di ksh Anda dapat menggunakan perintah yang sama tanpa tanda -e.
Saat skrip Anda akan digunakan di lingkungan yang berbeda, Anda dapat memulai skrip dengan #! / Bin / ksh atau #! / Bin / bash. Anda juga dapat mengganti \ n dengan baris baru:
sumber
Tidak terlalu seksi tetapi mungkin melakukan pekerjaan:
Diformulasikan dari jawaban "martin clayton".
sumber
sumber