Formatting the date in unix to include suffix on day (st, nd, rd and th)

后端 未结 3 1061
半阙折子戏
半阙折子戏 2021-02-15 00:26

How can I add the suffix on the day number of a unix date?

I\'ll explain. I have a TextMate bundle snippit that writes out today\'s date. It uses unix date and

3条回答
  •  暖寄归人
    2021-02-15 01:06

    I have something similar working on a Linux machine (Ubuntu 8.10). I don't think it will work with Solaris, the one machine I tested did not allow using a _ character following the % to avoid padding the field with a 0. The non-padding allows date to return 1 instead of 01 (01st doesn't look right versus 1st).

    I use a shell function (again, your OS or shell version may not like the way I defined the function) named DaySuffix, then call that func as part of the date call. The func itself is fairly hacky, I'm sure there is a better way to do this but it works for me. Note the special cases for 11, 12, & 13 - you've got to love the English language!

    #!/bin/sh
    
    DaySuffix() {
        if [ "x`date +%-d | cut -c2`x" = "xx" ]
        then
            DayNum=`date +%-d`
        else
            DayNum=`date +%-d | cut -c2`
        fi
    
        CheckSpecialCase=`date +%-d`
        case $DayNum in
        0 )
          echo "th" ;;
        1 )
          if [ "$CheckSpecialCase" = "11" ]
          then
            echo "th"
          else
            echo "st"
          fi ;;
        2 )
          if [ "$CheckSpecialCase" = "12" ]
          then
            echo "th"
          else
            echo "nd"
          fi ;;
        3 )
          if [ "$CheckSpecialCase" = "13" ]
          then
            echo "th"
          else
            echo "rd"
          fi ;;
        [4-9] )
          echo "th" ;;
        * )
          return 1 ;;
        esac
    }
    
    # Using consolidated date command from chris_l
    # Also using %-d instead of %d so it doesn't pad with 0's
    date "+%A %-d`DaySuffix` %B %Y"
    

提交回复
热议问题