Looping Dates macOS


date on MacOS does not support --date, so a workaround is needed. Converting Date to unix epoch, adding one day in epoch and converting back.

The Scripty Way

Taken from a blog post

#!/bin/zsh

start=$year-01-01
end=$year-12-31
currentDateTs=$(date -j -f "%Y-%m-%d" $start "+%s")
endDateTs=$(date -j -f "%Y-%m-%d" $end "+%s")
offset=86400

while [ "$currentDateTs" -le "$endDateTs" ]
do
  date=$(date -j -f "%s" $currentDateTs "+%Y-%m-%d")
  echo $date
  currentDateTs=$(($currentDateTs+$offset))
done

The Brew Way

As I found out long after writing the above you can simply brew install coreutils and get a date command with the --date option. The only thing to note there is this: Commands also provided by macOS have been installed with the prefix "g".

So the proper date command can now be accessed as gdate.

macos  bash 

See also