PHP действительно упрощает синтаксический анализ дат с текстовым вводом, если он доступен в вашей системе.
Пример:
bash-[522]$ php -qr 'date_default_timezone_set("UTC"); echo date("d-m-Y\n", strtotime("first monday of next month"));'
03-04-2017
У меня есть эта функция в моем .bashrc:
get_date ()
{
text="$*";
php -qr "date_default_timezone_set(\"UTC\"); echo date(\"d-m-Y\n\", strtotime(\"$text\"));"
}
Которая я могу использовать как:
bash-[523]$ get_date first monday of next month
03-04-2017
Редактировать Добавление опции для использования cal
Почти каждая система, имеющая bash
будет иметь cal
. Календарная программа. Вы можете получить список даты для первого дня каждого дня недели, запустив комбинацию cal
, date
и awk
следующим образом:
cal -hN $(date -d 'next month' +%b' '%Y) | grep -v $(date -d 'next month' +%b) | awk -v date=$(date -d 'next month' +%Y-%m-) '{ printf "%s: "date"%02i\n", $1, $2; }'
Это даст вам следующий результат:
Su: 2017-04-02
Mo: 2017-04-03
Tu: 2017-04-04
We: 2017-04-05
Th: 2017-04-06
Fr: 2017-04-07
Sa: 2017-04-01
Измените $ 2
на $ NF
в инструкции awk, чтобы получить дату последнего появления каждого дня месяца.
Эта функция принимает один параметр; он разделяет строку и число на основе символа подчеркивания, а затем выводит строку плюс увеличенное число:
function increment() {
local num=${1#*_};
local str=${1%_*};
printf "%s" "${str}_$((num+1))";
}
$ echo $(increment Brad_1)
Brad_2
$ echo $(increment Jeff_41)
Jeff_42