|April 5, 2017|
The Unix Date command is a very handy tool to do date displays and calculations.
The basic of displaying a date:
You can format the output by simply passing a few parameters:
|date +"%B %d, %Y"||April 05, 2017|
|Standard Date||date +"%A, %B %d, %Y"||Wednesday, April 05, 2017|
|Standard Time||date +"%I:%M %p"||03:29 PM|
|MySQL Format||date +"%Y-%m-%d %H:%M:%S"||2017-04-05 13:21:13|
|United States format date +"%m/%d/%Y"||04/05/2017|
|European date format||date +"%d %B, %Y"||05 April, 2017|
|ISO 8601 date format||date +"%Y-%m-%d"||2017-04-05|
|ISO 8601 Combined Format||date +"%Y-%m-%dT%R:%S"||2017-04-05T13:3252|
At my work we do release every Thursday. However, if the Thursday is within 2 days of the end of the month we skip doing a release that week.
It would be handy to know all the weeks that we will not be shipping and let people know in advance. I thought it would be a handy thing for a Bash script.
Here's a simple script that does that. This will loop through all the Thursdays in 2017 and see if it follows the business rule. If it's not a release week print out the date.
#!/bin/BASH max=50 for (( start = 1; start <= $max; start++ )) do # Get the Next Thursday check=$(date -v+"$start"w -v+1d +"%e") check_fmt=$(date -v+"$start"w -v+1d +"%B %e, %Y") # Get the last day of the Month lastday=$(date -v+"$start"w -v1d -v+1m -v-1d +"%e") # Check the number of days to the End of the Month daystoendofmonth=$(($lastday - $check)); # Apply the 2 Day Business Rule and echo the no release weeks if [ "$daystoendofmonth" -lt "2" ] then echo "Don't release on: " $check_fmt fi done
The above script is written to be run on a Wednesday.
When I run this script, I discovered:
Looks like we'll have a pretty quiet summer this year.
Feel free to leave a comment about this post.