Вывести дату на понедельник текущей недели (в bash)
Я хочу получить дату в формате 'ГГГГММдд' (например, сегодня будет 20110627) в формате для понедельника текущей недели. С завтрашнего дня и до воскресенья я бы хотел распечатать дату понедельника (сегодня). Затем на следующей неделе повторите процесс
5 ответов
#monday
date -dmonday +%Y%m%d
#last monday
date -dlast-monday +%Y%m%d
#next monday
date -dnext-monday +%Y%m%d
#two mondays from now
date -d'monday+14 days' +%Y%m%d
#two mondays ago
date -d'monday-14 days' +%Y%m%d
#although, if you fancy yourself an Abraham Lincolin
date -d'monday-fortnight ago' +%Y%m%d #2 weeks ago
date -d'monday+fortnight' +%Y%m%d #2 weeks from now
#Monday Next Year
date -d'52+monday' +%Y%m%d
#However, Monday Last Year
date -d'52-monday' +%Y%m%d #DOES NOT WORK
#you can try a day other than monday
#and format this differently.
если диапазон - это то, что вам нужно, вам нужно сделать несколько вещей
#Tuesday to Sunday
#since today is monday, I'll use Tuesday
echo `date -dtuesday +%Y%m%d-``date -dnext-sunday +%Y%m%d`
который бы вывел:
20110628-20110703
обратите внимание, это работает только на дату GNU
Я прочитал это:
Версия даты Solaris, которую невозможно поддерживать
-d
можно разрешить с заменой sunfreeware.com версии даты
Для тех из нас, у кого нет даты GNU (как мы OS Xers), у нас может быть параметр "-v"
Затем вы можете сделать это:
# Most recent Monday
date -v -Mon
# Output as of this writing
Mon Jun 24 12:35:48 EDT 2013
date -v -Mon "+%Y%m%d"
# Outputs
20130624
Это также, кажется, не проблема, если сегодня понедельник, в моем текущем случае четверг
# Today's date
date
# Outputs
Thu Jun 27 12:41:39 EDT 2013
# Most recent Thursday
date -v -Thu
# Outputs
Thu Jun 27 12:41:46 EDT 2013
Попробуйте это, чтобы получить текущую дату понедельника.
wd=`date +%u`;
let wd=wd-1;
mon=`date --date="-$wd day" +%Y%m%d`;
Я думаю, что это действительно отвечает на то, что было запрошено:
date -d "next monday - 7 days"
Если вам нужен понедельник, предшествующий заданной дате, например, функция начала недели, это еще не все. Это то, что я искал, когда искал этот вопрос, поэтому я добавлю свой ответ здесь.
Я попытался использовать подход «многоразовый инструмент».
Мойmonday
сценарий:
#!/bin/bash
date=${1:-now}
shift
dow=`date +%u -d "$date"`
dow0=$[ $dow - 1 ]
date -d "$date -$dow0 days" "$@"
Как это работает:
- получать
date -d
аргумент из первого аргумента командной строки, например «2020-01-01 -2 недели» - дополнительные аргументы передаются в команду окончательной даты, например, для форматирования с помощью
+%F
- получить день недели с помощью %u (1..7); 1 понедельник
- вычтите 1, так как нам нужен диапазон от 0 до 6.
- показать дату для данной даты, минус смещение "день недели"
Похожийsunday
script, который оказывается немного проще:
#!/bin/bash
date=${1:-now}
shift
dow=`date +%w -d "$date"`
date -d "$date -$dow days" "$@"
Использование:
# monday
Mon Aug 29 02:28:45 PM AEST 2022
# sunday now +%F
2022-08-28
# monday '2022-12-01' +%F
2022-11-28