4

is there a way to convert month number to name?

example:

2013-10-22 will become Oct 22

I don't have the GNU date and my OS is AIX.

3 Answers 3

3

if you only need to map a few keys to values , just use an array

#!/bin/ksh ## cmdline argument is e.g. "2003-10-22" DATE=$1 ### extract day, month and year into separate variables MONTHDAY=${DATE#*-} YEAR=${DATE%%-*} MONTH=${MONTHDAY%%-*} DAY=${MONTHDAY#*-} # an array to look up th month-names # since month-numbers start with 1, the first element in the array is invalid. set -A monthnames invalid Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ## perform the lookup MONTHNAME=${monthnames[${MONTH}]} ## display "<Month> <DAY>" echo ${MONTHNAME} ${DAY} 
3

GNU date:

$ date -d 2013-10-22 '+%b %-d' Oct 22 

OS X and FreeBSD date:

$ date -jf %F 2013-10-22 '+%b %-d' Oct 22 

%b is an abbreviated month name and %B is a full month name.

1
  • NB This returns locale-specific month names. I was wondering why in my case it was returning an all-lowercase month abbreviation until I ran it with %B and got the month name in my locale. I ended up using LC_NAME=en_US date -d 1980-03-01 '+%b' to force English month names. Commented Aug 17, 2021 at 17:43
2

With a recent enough version of ksh:

$ printf "%(%a %b %d %Y)T\n" 2013-10-22 Tue Oct 22 2013 

(note that it is locale aware, in a Spanish locale for instance, it will output mar oct 22 2013)

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.