Last active
December 10, 2015 21:36
-
-
Save weibeld/6694b7e9ec49df009595 to your computer and use it in GitHub Desktop.
Print a sequence of dates in one-week intervals
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# | |
# Print sequence of dates in one-week intervals, starting from an initial date. | |
# | |
# Daniel Weibel <[email protected]> October 2015 | |
#------------------------------------------------------------------------------# | |
set -e | |
help() { | |
cat <<EOF | |
weeks: print a sequence of dates in one-week intervals | |
Usage: | |
${0##*/} <start> <n> | |
Arguments: | |
<start> Start date in format "YYYY-MM-DD" | |
<n> Number of dates to print | |
EOF | |
} | |
[[ "$1" == --help || "$1" == -h ]] && help && exit | |
[[ "$#" -ne 2 ]] && help && exit 1 | |
start=$1 | |
n=$2 | |
# Number of seconds in a week | |
week=$((7*24*60*60)) | |
# Helper functions | |
is_mac() { [[ "$OSTYPE" =~ darwin ]]; } | |
is_linux() { [[ "$OSTYPE" =~ linux ]]; } | |
os_err() { echo "Error: unknown operating system" >&2; exit 1; } | |
# Convert "YYYY-MM-DD" (assume 12:00:00) to UNIX timestamp (seconds) | |
date2ts() { | |
if is_mac; then date -j -f "%Y-%m-%d %H%M%S" "$1 120000" '+%s' | |
elif is_linux; then date -d "$1 12:00:00" '+%s' | |
else os_err; fi | |
} | |
# Convert UNIX timestamp to date in a specific format | |
format='+%A, %d %B %Y' | |
ts2date() { | |
if is_mac; then date -j -f '%s' "$1" "$format" | |
elif is_linux; then date -d "@$1" "$format" | |
else os_err; fi | |
} | |
# Do actual work (calculate timestamps of dates to print, and print dates) | |
ts=$(date2ts "$start") | |
for i in $(seq 1 "$n"); do | |
ts2date "$ts" | |
ts=$(($ts+$week)) | |
done |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
bash> weeks 2015-12-10 40 | |
Thursday, 10 December 2015 | |
Thursday, 17 December 2015 | |
Thursday, 24 December 2015 | |
Thursday, 31 December 2015 | |
Thursday, 07 January 2016 | |
Thursday, 14 January 2016 | |
Thursday, 21 January 2016 | |
Thursday, 28 January 2016 | |
Thursday, 04 February 2016 | |
Thursday, 11 February 2016 | |
Thursday, 18 February 2016 | |
Thursday, 25 February 2016 | |
Thursday, 03 March 2016 | |
Thursday, 10 March 2016 | |
Thursday, 17 March 2016 | |
Thursday, 24 March 2016 | |
Thursday, 31 March 2016 | |
Thursday, 07 April 2016 | |
Thursday, 14 April 2016 | |
Thursday, 21 April 2016 | |
Thursday, 28 April 2016 | |
Thursday, 05 May 2016 | |
Thursday, 12 May 2016 | |
Thursday, 19 May 2016 | |
Thursday, 26 May 2016 | |
Thursday, 02 June 2016 | |
Thursday, 09 June 2016 | |
Thursday, 16 June 2016 | |
Thursday, 23 June 2016 | |
Thursday, 30 June 2016 | |
Thursday, 07 July 2016 | |
Thursday, 14 July 2016 | |
Thursday, 21 July 2016 | |
Thursday, 28 July 2016 | |
Thursday, 04 August 2016 | |
Thursday, 11 August 2016 | |
Thursday, 18 August 2016 | |
Thursday, 25 August 2016 | |
Thursday, 01 September 2016 | |
Thursday, 08 September 2016 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment