Date functions: parsedate


parsedate() #@ Parse various formats of date
{           #@ USAGE: parsedate ...
  local string=$* datefmt dateinfo
  if [[ $string == [0-9][0-9][0-9][0-9][012][0-9][0123][0-9] ]]
  then
    day=${year:6:2}
    month=${year:4:2}
    year=${year:0:4}
  elif [[ $string == [0-9][0-9][0-9][0-9]?[012][0-9]?[0123][0-9]* ]]
  then
    read year month day time junk <<< "${string//[!0-9]/ }"
  else
    datefmt="+%Y~%m~%d~%H~%M~%S~%Y-%m-%d_%H:%M:%S~%Y-%m-%d~%a~%j~%w~%b~%B~%A"
    dateinfo=$(date ${string:+-d "$string"} "$datefmt")
    IFS=\~ read year month day hour minute second datestamp date DayOfWeek \
      DayOfYear DayNum MonthAbbrev MonthName DayName <<< "$dateinfo"
  fi
}