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

后端 未结 3 1071
半阙折子戏
半阙折子戏 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"
    
    0 讨论(0)
  • 2021-02-15 01:06

    Try.

    #!/bin/sh
    DaySuffix() {
      case `date +%d` in
        1|21|31) echo "st";;
        2|22)    echo "nd";;
        3|23)    echo "rd";;
        *)       echo "th";;
      esac
    }
    date "+%A %d`DaySuffix` %B %Y"
    
    0 讨论(0)
  • 2021-02-15 01:19
    #!/bin/ksh
    DateSuffix() {
    if [ "$1" -eq "1" ] || [ "$1" -eq "21" ] || [ "$1" -eq "31" ]
    then
    echo 'st'
    elif [ "$1" -eq "2" ] || [ "$1" -eq "22" ]
    then
    echo 'nd'
    elif [ "$1" -eq "3" ] [ "$1" -eq "23" ]
    then
    echo 'rd'
    else
    echo 'th'
    fi   
    }
    date "+%A %d`DateSuffix` %B %Y"
    
    0 讨论(0)
提交回复
热议问题