Я ищу прямые команды Unix, чтобы получить первое воскресенье следующего месяца, первый понедельник следующего месяца, первый вторник следующего месяца, первую среду следующего месяца и т. Д.
Они понадобятся мне в полном формате даты (время не обязательно)
Я могу получить числа, такие как 2, 3, 4 и т. Д. Так как я не хочу только цифры, они мне понадобятся в формате даты (включая день, месяц, год)
$ NEXT_MONTH=`date +'%m %Y' -d 'next month'` $ echo $NEXT_MONTH 04 2017 $ NEXT_SUNDAY=`cal $NEXT_MONTH | awk 'NF==7 && !/^Su/{print $1;exit}'` $ echo $NEXT_SUNDAY 2
Эти даты мне понадобятся для отправки уведомлений в группу электронной почты.
Пример: я мог бы получить первую субботу следующего месяца, как показано ниже.
$ firstofmonth=$(date -d '+1 months' '+%Y%m01')
20170401
$ firstsaturday=$(date -d "$firstofmonth" '+%Y-%m')-$((7 - \
$(date -d "$firstofmonth" '+%u') ))
2017-04-1
bash
является незаконченным клоном ksh (с некоторыми особенностями (t) csh и zsh и даже несколькими собственными). В последних версияхbash
добавлена поддержкаprintf '%(format)T'
fromksh93
, но нет возможности разбирать спецификации даты такого рода. Замени свою чёлку на#! /path/to/ksh93 -
.bash
это незаконченный клон кш», - я всегда так чувствовал.Предполагая GNU
date
(для этого-d
вы используете себя), иzsh
-подобную оболочку для{1..7}
:Замените на
awk
Monлюбой требуемый день недели (используйте,LC_ALL=C
чтобы получить английские названия месяцев независимо от локали пользователя). Кроме того, может быть лучше сохранить это в переменной, если вы будете запрашивать каждый день недели:источник
PHP на самом деле позволяет довольно просто анализировать даты с помощью ввода текста, если он доступен в вашей системе.
Пример:
У меня есть эта функция в моем .bashrc:
Который я могу использовать как:
Редактировать Добавление опции для использования
cal
Почти каждая система, которая имеет,
bash
будет иметьcal
. Программа календаря. Вы можете получить список на дату первого числа каждого дня недели, выполнив комбинациюcal
,date
иawk
, следующим образом :Который даст вам следующий вывод:
Изменение
$2
к$NF
в заявлении AWK , чтобы получить дату последнего совпадения каждый день в течение месяца.источник
php
установили. Я обновил с примером , который используетcal
,date
иawk
команду.