linux + tambahkan X hari ke tanggal dan dapatkan tanggal virtual baru

115

Saya memiliki mesin Linux (RH 5.3)

Saya perlu menambah / menghitung 10 hari plus tanggal sehingga saya akan mendapatkan tanggal baru (tanggal kedaluwarsa))

sebagai contoh

 # date 
 Sun Sep 11 07:59:16 IST 2012

Jadi saya harus mendapatkannya

     NEW_expration_DATE = Sun Sep 21 07:59:16 IST 2012

Mohon saran bagaimana menghitung tanggal kedaluwarsa baru (dengan perintah bash, ksh, atau memanipulasi tanggal?)

Lenin Raj Rajasekaran
sumber

Jawaban:

158

Anda cukup menggunakan -dsakelar dan memberikan tanggal untuk dihitung

date
Sun Sep 23 08:19:56 BST 2012
NEW_expration_DATE=$(date -d "+10 days")
echo $NEW_expration_DATE
Wed Oct 3 08:12:33 BST 2012 
  -d, --date=STRING
          display time described by STRING, not now

Ini adalah alat yang sangat kuat karena Anda dapat melakukan hal-hal seperti

date -d "Sun Sep 11 07:59:16 IST 2012+10 days"
Fri Sep 21 03:29:16 BST 2012

atau

TZ=IST date -d "Sun Sep 11 07:59:16 IST 2012+10 days"
Fri Sep 21 07:59:16 IST 2012

atau

prog_end_date=`date '+%C%y%m%d' -d "$end_date+10 days"`

Jadi jika $ end_date = 20131001 maka $ prog_end_date = 20131011


sumber
2
Terima kasih!! Contoh Anda harus di datehalaman info GNU !
Davor Cubranic
Tidak pernah tahu saya bisa melakukan ini - itu adalah solusi yang sangat bagus.
Tim Seed
1
+1: Luar Biasa. Jawaban yang berguna.
copper.hat
1
Pada OS X saat menggunakan tanggal bawaan Anda akan menerima kesalahan. Gunakan brew install coreutilsuntuk menginstal fungsi tanggal GNU gdate,.
CousinCocaine
2
tidak berfungsi: $ docker run -it bash bash bash-5.0# date -d "+10 days" date: invalid date '+10 days' bash-5.0#
Christian Bongiorno
37

Anda dapat menggunakan "+ x hari" sebagai string format:

$ date -d "+10 days"
kuanta
sumber
20
$ date -v -1d

Untuk mendapatkan tanggal kembali 1 hari menggunakan perintah tanggal:

$ date -v -1d

Ini akan memberi (tanggal sekarang -1) berarti 1 hari sebelumnya.

$ date -v +1d

Ini akan memberi (tanggal sekarang +1) berarti 1 hari setelahnya.

Demikian pula kode tertulis di bawah ini dapat digunakan sebagai pengganti "d" untuk mencari tahu tahun, bulan dll.

y-Year
m-Month 
w-Week 
d-Day 
H-Hour 
M-Minute  
S-Second
Abhilash Kumar
sumber
8
Ini berfungsi untuk saya di mac saya, tetapi tidak di server Gentoo kami.
Mike Dotterer
Jauh lebih baik daripada jawaban yang diterima, ini memungkinkan untuk format tanggal yang sewenang-wenang juga dalam satu baris.
pferrel
9
ini tidak berfungsi di Ubuntu 15.10 atau RedHat 6.6. Saya menganggap itu tidak berfungsi pada RH5.3 juga. Alasan: '-v' dan '-1d' bukan saklar yang valid untuk 'date'
syss
2
Tampaknya ini adalah sintaks Unix / BSD date, yang tidak didukung oleh GNU date( gdatepada banyak BSD). GNU datemenggunakan sintaksis dalam jawaban yang diterima. Selalu ingat: GNU's Not Unix!
Bacon Bits
1
@ Bitacon - tetapi jika Anda rms Anda dapat mengklaim bahwa karena banyak kode util GNU telah porting ke Linux yang karena itu "Linux adalah GNU". Kecuali, tentu saja, untuk fakta bahwa GNU Hurd (OSF Once-And-Future-FSF) hanyalah sebuah hal. Saya kira apa yang bikin basi adalah bahwa ketika dia menghabiskan waktunya untuk melakukan pemusnahan, Linus menghabiskan waktunya menulis kode - yang ternyata menjadi bukti positif bahwa Anda jauh lebih mungkin untuk membuat perangkat lunak yang berfungsi jika Anda menulis kode daripada jika Anda berkewajiban. :-)
Bob Jarvis