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 !
Давор Кубраник

Никогда не знал, что смогу это сделать - это действительно хорошее решение.
Тим Сид

1
+1: потрясающе. Полезный ответ.
медь. Что

1
На OS X при использовании встроенной даты вы получите ошибку. Используйте brew install coreutilsдля установки функции даты GNU gdate.
Кузен Кокаин

2
не работает: $ docker run -it bash bash bash-5.0# date -d "+10 days" date: invalid date '+10 days' bash-5.0#
Кристиан Бонджорно

37

Вы можете использовать «+ x days» в качестве строки формата:

$ date -d "+10 days"

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.
Майк Доттерер

Гораздо лучше, чем принятый ответ, это позволяет использовать произвольные форматы даты в одной строке.
пферрел

9
это не работает на Ubuntu 15.10 или RedHat 6.6. Я предполагаю, что это не работает на RH5.3 также. Причина: '-v' и '-1d' не являются допустимыми переключателями для 'date'
syss

2
Похоже, это синтаксис Unix / BSD date, который GNU date( gdateна многих BSD) не поддерживает. GNU dateиспользует синтаксис в принятом ответе. Всегда помните: GNU - это не Unix!
Бекон Бит

1
@BaconBits - но если вы являетесь rms, вы можете заявить, что, поскольку большая часть утилитарного кода GNU была перенесена на Linux, следовательно, «Linux - это GNU». За исключением, конечно, факта, что GNU Hurd (FSF Once-And-Future-OS) - это всего лишь вещь. Я полагаю, что раздражает то, что в то время как он потратил свое время на понтификацию, Линус потратил свое время на написание кода - что доказывает, что вы гораздо чаще создаете работающее программное обеспечение, если пишете код, чем если вы понтифицируете. :-)
Боб Джарвис
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.