Date functions: day_of_week


day_of_week() #@ Convert ISO date (YYYY-MM-DD) to day of the week (Sunday = 0)
{             #@ USAGE: day_of_week DATE [shortname|dayname|VAR]
  local var dn shortnames=( Sun Mon Tue Wed Thu Fri Sat Sun )
  local daynames=( Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday )
  shortname= dayname=
  is_var "$2" && shift
  if ! datenum "$1" dn
  then
    err 2 "What??? dn=$dn" || return
  fi
  (( dn > 639785 )) && dn=$(( dn - 3 )) || dn=$(( dn + 6 ))
  ### Need a method for choosing which of the following to use:
  if [[ $_SUNDAY_ == 7 ]]
  then
    day_of_week=$(( ((dn-1) % 7) + 1 )) ## Sunday = 7
  else
    day_of_week=$(( dn % 7 ))           ## Sunday = 0
  fi
  [[ $var == shortname ]] && shortname=${shortnames[day_of_week]} && return
  [[ $var == dayname   ]] && dayname=${daynames[day_of_week]}     && return
  [[ "$var" ]] &&  printf -v "$var" %s "$day_of_week" || vshow day_of_week
}