linux + เพิ่ม X วันเป็นวันและรับวันเสมือนใหม่


115

ฉันมีเครื่อง Linux (RH 5.3)

ฉันต้องการเพิ่ม / คำนวณ 10 วันรวมถึงวันที่ดังนั้นฉันจะได้รับวันใหม่ (วันหมดอายุ)

ตัวอย่างเช่น

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

ดังนั้นฉันต้องได้รับ

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

โปรดแนะนำวิธีการคำนวณวันหมดอายุใหม่ (ด้วยคำสั่ง bash, ksh หรือจัดการกับวันที่?)

คำตอบ:


158

คุณสามารถใช้-dสวิตช์และระบุวันที่ที่จะคำนวณได้

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

นี่เป็นเครื่องมือที่ทรงพลังอย่างที่คุณสามารถทำได้

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

หรือ

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

หรือ

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

ดังนั้นถ้า $ end_date = 20131001 ดังนั้น $ prog_end_date = 20131011


2
ขอขอบคุณ!! ตัวอย่างของคุณควรอยู่ในdateหน้าข้อมูลGNU !
Davor Cubranic

ไม่เคยรู้เลยว่าฉันสามารถทำได้ - นี่เป็นทางออกที่ดีจริงๆ
Tim Seed

1
+1: ยอดเยี่ยม คำตอบที่เป็นประโยชน์
ทองแดง

1
ใน OS X เมื่อใช้วันที่สร้างคุณจะได้รับข้อผิดพลาด ใช้brew install coreutilsในการติดตั้งฟังก์ชั่นวันที่ GNU gdateของ
CousinCocaine

2
ไม่ทำงาน: $ docker run -it bash bash bash-5.0# date -d "+10 days" date: invalid date '+10 days' bash-5.0#
Christian Bongiorno


20
$ date -v -1d

เพื่อให้ได้วันที่ย้อนหลัง 1 วันโดยใช้คำสั่ง date:

$ date -v -1d

มันจะให้ (วันที่ปัจจุบัน -1) หมายถึง 1 วันก่อน

$ date -v +1d

สิ่งนี้จะให้ (วันที่ +1 ปัจจุบัน) หมายถึง 1 วันหลังจากนั้น

ในทำนองเดียวกันโค้ดด้านล่างนี้สามารถใช้แทน "d" เพื่อค้นหาปีเดือน ฯลฯ

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

8
สิ่งนี้ใช้ได้กับฉันใน mac แต่ไม่ได้อยู่ในเซิร์ฟเวอร์ Gentoo ของเรา
Mike Dotterer

ดีกว่าคำตอบที่ยอมรับได้ซึ่งจะช่วยให้รูปแบบวันที่โดยพลการในบรรทัดเดียว
pferrel

9
สิ่งนี้ใช้ไม่ได้กับ Ubuntu 15.10 หรือ RedHat 6.6 ฉันคิดว่ามันไม่ทำงานบน RH5.3 เช่นกัน สาเหตุ: '-v' และ '-1d' ไม่มีสวิตช์ที่ถูกต้องสำหรับ 'date'
syss

2
สิ่งนี้ดูเหมือนจะเป็นไวยากรณ์ Unix / BSD สำหรับdateซึ่ง GNU date( gdateในBSD จำนวนมาก) ไม่สนับสนุน GNU dateใช้ไวยากรณ์ในคำตอบที่ยอมรับ โปรดจำไว้เสมอ: GNU's Not Unix!
เบคอนบิตส์

1
@BaconBits - แต่ถ้าคุณเป็น rms คุณสามารถอ้างสิทธิ์ได้เนื่องจากมีโค้ดของ GNU util จำนวนมากที่ถูกย้ายไปยัง Linux ดังนั้น "Linux is GNU" ยกเว้นแน่นอนสำหรับความจริงที่ว่า GNU Hurd (ครั้งหนึ่งและอนาคตของ FSF) เป็นเพียงสิ่งหนึ่ง ฉันคิดว่าสิ่งที่น่ารำคาญก็คือในขณะที่เขาใช้เวลาในการเยาะเย้ยไลนัสใช้เวลาในการเขียนโค้ดซึ่งกลายเป็นข้อพิสูจน์ในเชิงบวกว่าคุณมีแนวโน้มที่จะสร้างซอฟต์แวร์ที่ใช้งานได้มากกว่าถ้าคุณเขียนรหัส :-)
Bob Jarvis
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.