linux + thêm X ngày đến ngày và nhận ngày ảo mới


115

Tôi có máy Linux (rh 5.3)

Tôi cần thêm / tính 10 ngày cộng với ngày để sau đó tôi sẽ nhận được ngày mới (ngày hết hạn))

ví dụ

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

Vì vậy tôi cần phải có được

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

Xin tư vấn cách tính ngày hết hạn mới (với lệnh bash, ksh hoặc thao tác lệnh ngày?)

Câu trả lời:


158

Bạn chỉ có thể sử dụng công -dtắc và cung cấp một ngày để được tính toán

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

Đây là một công cụ khá mạnh mẽ vì bạn có thể làm những việc như

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

hoặc là

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

hoặc là

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

Vì vậy, nếu $ end_date = 20131001 thì $ prog_end_date = 20131011


2
Cảm ơn bạn!! Ví dụ của bạn nên có trong datetrang thông tin GNU !
Davor Cubranic

Không bao giờ biết tôi có thể làm điều này - đó là một giải pháp thực sự tốt đẹp.
Tim Seed

1
+1: Tuyệt vời. Câu trả lời hữu ích.
Ngày

1
Trên OS X khi sử dụng ngày tích hợp, bạn sẽ gặp lỗi. Sử dụng brew install coreutilsđể cài đặt chức năng ngày của GNU , gdate.
CousinCocaine

2
không hoạt động: $ docker run -it bash bash bash-5.0# date -d "+10 days" date: invalid date '+10 days' bash-5.0#
Christian Bongiorno

37

Bạn có thể sử dụng "+ x ngày" làm chuỗi định dạng:

$ date -d "+10 days"

20
$ date -v -1d

Để có được ngày trở lại 1 ngày bằng lệnh date:

$ date -v -1d

Nó sẽ cho (ngày hiện tại -1) có nghĩa là 1 ngày trước đó.

$ date -v +1d

Điều này sẽ cung cấp (ngày hiện tại +1) có nghĩa là 1 ngày sau.

Tương tự bên dưới mã viết có thể được sử dụng thay cho "d" để tìm ra năm, tháng, v.v.

y-Year
m-Month 
w-Week 
d-Day 
H-Hour 
M-Minute  
S-Second

8
Điều này hoạt động với tôi trên máy Mac của tôi, nhưng không phải trên máy chủ Gentoo của chúng tôi.
Mike Dotterer

Tốt hơn nhiều so với câu trả lời được chấp nhận, điều này cho phép các định dạng ngày tùy ý quá trong một dòng.
pferrel

9
điều này không hoạt động trên Ubuntu 15.10 hoặc RedHat 6.6. Tôi cho rằng nó cũng không hoạt động trên RH5.3. Lý do: '-v' và '-1d' không có công tắc hợp lệ cho 'ngày'
syss

2
Đây dường như là một cú pháp Unix / BSD date, mà GNU date( gdatetrên nhiều BSD) không hỗ trợ. GNU's datesử dụng cú pháp trong câu trả lời được chấp nhận. Luôn nhớ: GNU không phải Unix!
Bacon Bits

1
@BaconBits - nhưng nếu bạn là rms, bạn có thể khẳng định rằng vì rất nhiều mã sử dụng GNU đã được chuyển sang Linux, do đó "Linux GNU". Tất nhiên, ngoại trừ, thực tế là GNU Hurd (Hệ điều hành một lần và tương lai của FSF) chỉ là một điều. Tôi cho rằng điều khiến người ta bực mình là trong khi anh ta dành thời gian để làm việc, Linus đã dành thời gian để viết mã - hóa ra là bằng chứng tích cực rằng bạn có nhiều khả năng tạo ra phần mềm làm việc nếu bạn viết mã hơn là khi bạn viết. :-)
Bob Jarvis
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.