[Question]
  [
Given a number 1≤n≤365, output the nth day of the year in "Day-numberth Month" format. For example, given 1, you should output "1st January", without "of".
The Gregorian calendar will be used and the program should not account for leap years, so your program should never output "29th February" in any circumstance. Any method can be used, as long as it follows the "Day-numberth Month" format mentioned before. Your program should also output ordinals correctly, meaning it should always output 1st, 2nd, 3rd, should 1, 2 or 3 respectively be the day numbers for any input. Leading spaces or other indentation are allowed.
This is code golf, so the shortest solution by characters wins.
Test cases:
```
1 gives 1st January
2 gives 2nd January
3 gives 3rd January
365 gives 31st December
60 gives 1st March
11 gives 11th January
```
  
[Answer]
# [PHP](https://php.net/), ~~38~~ ~~40~~ ~~30~~ 28 bytes
```
<?=date("jS F",86399*$argn);
```
[Try it online!](https://tio.run/##K8go@G9jX5BRoKCSWJSep2CrYGZgrWBvBxS0TUksSdVQygpWcFPSsTAztrTUAqvRtP7/HwA "PHP – Try It Online")
Run with `php -nF` input is from `STDIN`. Example (above script named `y.php`): 
```
$ echo 1|php -nF y.php
1st January
$ echo 2| php -nF y.php
2nd January
$ echo 3| php -nF y.php
3rd January
$ echo 11|php -nF y.php
11th January
$ echo 21|php -nF y.php
21st January
$ echo 60|php -nF y.php
1st March
$ echo 365|php -nF y.php
31st December
```
**Explanation**
Construct an epoch timestamp for the desired day in 1970 (conveniently not a leap year) by multiplying the `day number * number of seconds per day` (86400). However, this would yield one day higher so instead multiply by `number of seconds in a day - 1` (86399) which for the range of input numbers (1≤n≤365) will result with the timestamp of the end of each correct day. Then just use PHP's built-in date formatting for output.
[Answer]
# [Jelly](https://github.com/DennisMitchell/jelly), ~~79 78~~ 77 [bytes](https://github.com/DennisMitchell/jelly/wiki/Code-page)
-1 fixing a bug :) (shouldn't pre-transpose to find index, should post-reverse, but then we can tail rather than head)  
-1 using reflection (`⁽©ṅB+30_2¦2` -> `⁽0ṗb4+28m0`)
```
⁽0ṗb4+28m0SRṁRƲœiµṪȮ%30%20«4ị“nḄƲf⁷»s3¤Ṗ,ị“£ṢtẒ⁽ẹ½MḊxɲȧėAṅ ɓaṾ¥D¹ṀẏD8÷ṬØ»Ḳ¤$K
```
A full program which prints the result
**[Try it online!](https://tio.run/##AZkAZv9qZWxsef//4oG9MOG5l2I0KzI4bTBTUuG5gVLGssWTacK14bmqyK4lMzAlMjDCqzThu4vigJxu4biExrJm4oG3wrtzM8Kk4bmWLOG7i@KAnMKj4bmidOG6kuKBveG6ucK9TeG4injJssinxJdB4bmFIMmTYeG5vsKlRMK54bmA4bqPRDjDt@G5rMOYwrvhuLLCpCRL////NDU "Jelly – Try It Online")**
### How?
*will update this later...*
```
⁽©ṅB+30_2¦2SRṁRƲZœiµḢȮ%30%20«4ị“nḄƲf⁷»s3¤Ṗ,ị“...»Ḳ¤$K - Main Link: integer, n
⁽©ṅB+30_2¦2SRṁRƲZœi - f(n) to get list of integers, [day, month]
⁽©ṅ                 - compressed literal 2741
   B                - to a list of binary digits -> [ 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1]
    +30             - add thirty                    [31,30,31,30,31,30,31,31,30,31,30,31]
         ¦          - sparse application...
        2           - ...to indices: [2]
       _  2         - ...action: subtract two       [31,28,31,30,31,30,31,31,30,31,30,31]
               Ʋ    - last four links as a monad - i.e. f(x):
           S        -   sum x                       365
            R       -   range                       [1..365]
              R     -   range x (vectorises)        [[1..31],[1..28],...]
             ṁ      -   mould like                  [[1..31],[32..59],...]
                Z   - transpose                     [[1,32,...],[2,33,...],...]
                 œi - 1st multi-dimensional index of n  -> [day, month]
µḢȮ%30%20«4ị“nḄƲf⁷»s3¤Ṗ,ị“...»Ḳ¤$K - given [day, month] format and print
µ                                  - start a new monadic chain - i.e. f(x=[day, month])
 Ḣ                                 - head -- get the day leaving x as [month])
  Ȯ                                - print it (with no newline) and yield it
   %30                             - modulo by thirty
      %20                          - modulo by twenty
         «4                        - minimum of that and four
                     ¤             - nilad followed by link(s) as a nilad:
            “nḄƲf⁷»                -   dictionary words "standard"+" the" = "standard the"
                   s3              -   split into threes = ["sta","nda","rd ","the"]
           ị                       - index into
                      Ṗ            - remove rightmost character
                               ¤   - nilad followed by link(s) as a nilad:
                         “...»     -   dictionary words "January"+" February"+...
                              Ḳ    -   split at spaces = ["January","February",...]
                        ị          - index into (vectorises across [month])
                       ,           - pair                  e.g. ["th", ["February"]]
                                K  - join with spaces           ["th ", "February"]
                                   - print (implicitly smashes)   th February
```
[Answer]
# [C# (Visual C# Interactive Compiler)](http://www.mono-project.com/docs/about-mono/releases/5.0.0/#csc), ~~115~~ ~~113~~ ~~109~~ 98 bytes
```
g=>$"{f=(g=p.AddDays(g-1)).Day}{"tsnr"[f=f%30%20<4?f%10:0]}{"htdd"[f]} {g:MMMM}";DateTime p;int f;
```
Thanks to @someone for saving 9 bytes
[Try it online!](https://tio.run/##FY6xCoMwFEX3foWECglWiW1xMMZSkE7tVuhQHMSY9A2mkqSDiN@exjsd7llOb9Pegr/9dF@JWXcj9AfrDGhVy/Bxr3i9R4vkWPEpuwrRdLPFKs0JyQKuC3JWG/SWXMYnGh9pdb7IOKclbYP7OCGCa9doUeUjbEWs6dzwhHGIJgbaRZJ5@TV4Q@A5g@pUFAyShOxeBtxwBz3grQQDIcz/AQ "C# (Visual C# Interactive Compiler) – Try It Online")
[Answer]
# [Python 3.8 (pre-release)](https://docs.python.org/3.8/), 112 bytes
```
lambda x:str(d:=(t:=gmtime(x*86399)).tm_mday)+'tsnrhtdd'[d%5*(d%30%20<4)::4]+strftime(' %B',t)
from time import*
```
[Try it online!](https://tio.run/##HYxLDoIwFAD3nqIb0lcwBEQNNLLxGmpMzWuFhH5SXgycvqKznGQmrDR417QhJtPf06TsCxVb5EwRUPZAsn9bGq2GJW/PTdcJUZJ9WlSrKDjNLg6EyG@YnXLArKmyQ3U5CimPj2J7mH/KWXblexI7E71lP8VGG3ykPIU4OgID@qMm8EE7qEQZtUIQG6muvw "Python 3.8 (pre-release) – Try It Online")
Weirdly enough, I don't have to parenthesize `d:=(t:=gmtime(~-x*86400)`, probably because the interpreter only checks if there are `()` characters around the assignment expression and not that the expression itself is parenthesized.
-2 thanks to [gwaugh](https://codegolf.stackexchange.com/users/84624/gwaugh).  
-5 thanks to [xnor](https://codegolf.stackexchange.com/users/20260/xnor).
[Answer]
# [Perl 6](https://github.com/nxadm/rakudo-pkg), ~~166~~ 161 bytes
```
{~(.day~(<th st nd rd>[.day%30%20]||'th'),<January February March April May June July August September October November December>[.month-1])}o*+Date.new(1,1,1)-1
```
[Try it online!](https://tio.run/##JY1BC4JAFITv/Yp3sbRMXCUvmSBIB6E6dAwPqz4z0FW2tVgy/7qtxoN538xhpkVeeWMtYVnAYfwMupVTOei@KOEpgOXA8@A2ZZpra46d9P1KlCvD9GPKOsolHDHlM5woz0oIW/6oFEuIO4ZKKglhd@9U2RVbgXWKHC6ZaKZ/bl7/IMJsBjVVN0yUW5IY32a9iahAi@FbJ6Y6Y0vG/cIn4IALrrcDzwainB0EgbUslDypHH8 "Perl 6 – Try It Online")
Hardcodes all the month names, which takes up most of the space. Man, Perl 6 really needs a proper date formatter.
[Answer]
# Hack, ~~115~~ ~~59~~ 39 bytes
```
$x==>date("jS F",mktime(0,0,0,1,$x));
```
Since @gwaugh got to the same solution as mine while I was golfing, I'm posting this in Hack instead :).
[Answer]
# JavaScript (ES6), ~~117~~ 113 bytes
*Saved 4 bytes thanks to [@tsh](https://codegolf.stackexchange.com/users/44718/tsh)*
```
d=>(n=(d=new Date(1,0,d)).getDate())+([,'st','nd','rd'][n%30%20]||'th')+' '+d.toLocaleString('en',{month:'long'})
```
[Try it online!](https://tio.run/##Hcu9bsIwFIbhvVfhAWRbfEQ@x/mBVmFqt24dERJRbBKq1K6C1Q4h156iLo/0Du9n89Pc2vH6nbYhOr9c6sXVBxVq5ergf8Vrk7wiGDits86n/9Z6o46QtyQhg3swOnk6hrU1azan@12mXuqNFHLjshTfY9sM/iON19Ap6YPE9BVD6p/lEEMnZ728HAkMixwFSlTYYQ8yIAIxyIJyUAEqQRVoB9qDDfjxMNiCc3ABLsEVeAfewxpYQvmwLE5P2SWOb03bKyfqg2hjuMXBZ0Ps1Hk1uVlsD2I1XZTT81nr5Q8 "JavaScript (Node.js) – Try It Online")
### Commented
```
d =>                     // d = input day
  ( n =                  //
    ( d =                // convert d to
      new Date(1, 0, d)  //   a Date object for the non leap year 1901
    ).getDate()          // save the corresponding day of month into n
  ) + (                  //
    [, 'st', 'nd', 'rd'] // ordinal suffixes
    [n % 30 % 20]        // map { 1, 2, 3, 21, 22, 23, 31 } to { 'st', 'nd', 'rd' }
    || 'th'              // or use 'th' for everything else
  ) + ' ' +              // append a space
  d.toLocaleString(      // convert d to ...
    'en',                // ... the English ...
    { month: 'long' }    // ... month name
  )                      //
```
---
# Without date built-ins, 188 bytes
```
f=(d,m=0)=>d>(k=31-(1115212>>m*2&3))?f(d-k,m+1):d+([,'st','nd','rd'][d%30%20]||'th')+' '+`JanuaryFebruaryMarchAprilMayJuneJulyAugustSeptemberOctoberNovemberDecember`.match(/.[a-z]*/g)[m]
```
[Try it online!](https://tio.run/##HZBLb4JAGEX3/RUstMPIBflmBLUNNCZtFya2iy4JCSODj8rD8DCx6m@3tJtzchc3N7nf6qSatN4fW7usdHa/bwJTowhcHoQ6NA@BJNskIk@QCMNiJB4l5y8bU9sHFBbxJ22ZEVjTMrBS96g1iyM9lO5QuPH1ytod4xYzmJUsVdmp@vyeres/r1Sd7hbHep@v1HnZldmyy8@Lbts17Vd2bLNindWfaVv1@qhO//E1S/@dOIVq0505diJl/8Sj8ZZHRXx/jggCEhN48DHFDHOQCyKQAEnQBOSBfNAUNAPNIVyIviMgJMQEwoPwIaYQM4g5pAtJ8Hv6XvzgbKr6TfWr2ghCI63KpsozJ6@2ZjK46Jthh8bg0h/Dbwnn918 "JavaScript (Node.js) – Try It Online")
[Answer]
# Smalltalk, 126 bytes
```
d:=Date year:1day:n.k:=m:=d dayOfMonth.10<k&(k<14)and:[k:=0].o:={#st.#nd.#rd}at:k\\10ifAbsent:#th.m asString,o,' ',d monthName
```
[Answer]
# [C# (Visual C# Interactive Compiler)](http://www.mono-project.com/docs/about-mono/releases/5.0.0/#csc), ~~141~~ ~~139~~ ~~133~~ ~~124~~  122 bytes
```
a=>{var d=s.AddDays(a-1);int x=d.Day,m=x%30%20;return x+"thstndrd".Substring(m<4?m*2:0,2)+d.ToString(" MMMM");};DateTime s
```
Thanks to [Arnauld](https://codegolf.stackexchange.com/users/58563/arnauld) for faster method of removing 11,12,13th saving 4 bytes
[Try it online!](https://tio.run/##JY3LCsIwFET3fsWlUEjsg7Y@FqapCMWVrhRcxybVu2gKSSqV4rfHirM8zJlpbNJY9MdBNyVqF1tnUD8qaLkXvJpewoDkNj1IWYu3JSLJKZt7MHKZziTu@BiusrDImFFuMBrGKHBP67Q0Mkgvw/0/SLpyve@WxS6LCxrJ9Npf/jyA85yAsg@rhVNX7BRYzxZtb8jvB3nOEEpYbTcMMIrodDPo1Am1Ii1BOov@Cw "C# (Visual C# Interactive Compiler) – Try It Online")
[Answer]
# [R](https://www.r-project.org/), 158 134 bytes
-24 bytes @Nick Kennedy for golfing the 'st', 'nd', 'rd', & 'th'. Thanks!
```
f=format;paste0(a<-as.double(f(d<-as.Date(scan(,''),'%j'),'%e')),`if`((a-1)%%10>2|a%/%10==1,'th',c("st","nd","rd")[a%%10]),f(d,' %B'))
```
[Try it online!](https://tio.run/##HYxBCsIwEEWvIoEwMzDVRldi40K8hQgdmwQV20oSd949xm4e/8PjxVKCDXMcJR/ekrJvUbpG0trNn9vLY0C33LNkj2mQCRmAGPRzoQci7h@hR5TGkNamPW6/ojd1WGsY8h14QJWyYjW5iugUXeQvXolrnWGlT7VS9rvyAw "R – Try It Online")
[Answer]
# MySQL, ~~47~~ ~~45~~ 42 bytes
```
SELECT DATE_FORMAT(MAKEDATE(1,n),"%D %M")
```
1901 can be replaced with any year that was/is not a leap year.
Edit: saved two bytes by removing spaces and another three bytes by changing the year to 1, thanks to [@Embodyment of Ignorance](https://codegolf.stackexchange.com/users/84206/embodiment-of-ignorance).
[Answer]
# [05AB1E](https://github.com/Adriandmen/05AB1E/wiki/Commands), ~~81~~ ~~79~~ ~~78~~ ~~76~~ ~~75~~ ~~74~~ ~~73~~ ~~71~~ ~~70~~ 69 [bytes](https://github.com/Adriandmen/05AB1E/wiki/Codepage)
```
•ΘÏF•ºS₂+.¥-D0›©ÏθDT‰ć≠*4šß„—ÃŠØ3ôsè¨ð”……‚æ‡‰…ä†ï€¿…Ë…ê†Ä…æ…Ì…Í”#®OèJ
```
-9 bytes thanks to *@Grimy*.  
-1 byte thanks to @JonathanAllan's `standard the` trick for `th,st,nd,rd`, which he used in [his Jelly answer](https://codegolf.stackexchange.com/a/181524/52210).
[Try it online](https://tio.run/##yy9OTMpM/f//UcOiczMO97sB6UO7gh81NWnrHVqq62LwqGHXoZWH@8/tcAl51LDhSPujzgVaJkcXHp7/qGHeo4Yph5uPLjg8w/jwluLDKw6tOLzhUcPcRw3LwGjWYSCxEKgJyDu85FHDgsPrHzWtObQfxO0GEatAYi0gFkjD4R4Q0Qs0QPnQOv/DK7z@/zc3BAA) or [verify all possible test cases](https://tio.run/##yy9OTMpM/W9sZurqZ6@k8KhtkoKSvd//Rw2Lzs043O8GpA/tCn7U1KStd2iprovBo4Zdh1Ye7j@3wyXkUcOGI@2POhdomRxdeHj@o4Z5jxqmHG4@uuDwDOPDW4oPrzi04vCGRw1zHzUsA6NZh4HEQqAmIO/wkkcNCw6vf9S05tB@ELcbRKwCibWAWCANh3tARC/QAOVD6/wPr/D6r/MfAA).
**Explanation:**
```
•ΘÏF•        # Push compressed integer 5254545
     º       # Mirror it vertically: 52545455454525
      S      # Converted to a list of digits: [5,2,5,4,5,4,5,5,4,5,4,5,2,5]
       ₂+    # And 26 to each: [31,28,31,30,31,30,31,31,30,31,30,31,28,31]
             # (the additional trailing 28,31 won't cause any issues)
.¥           # Undelta this list (with automatic leading 0):
             #  [0,31,59,90,120,151,181,212,243,273,304,334,365,393,424]
  -          # Subtract each from the (implicit) input-integer
   D0›       # Duplicate the list, and check for each if it's positive (> 0)
      ©      # Store the resulting list in the register (without popping)
       Ï     # Only leave the values at those truthy indices
        θ    # And get the last value from the list, which is our day
D            # Duplicate this day
 T‰          # Take the divmod-10 of this day: [day//10, day%10]
   ć         # Extract the head; pop and push the remainder-list and head: [day%10], day//10
    ≠        # Check whether the day//10 is NOT 1 (0 if day//10 == 1; 1 otherwise)
     *       # Multiply that by the [day%10] value
      4š     # Prepend a 4 to this list
        ß    # Pop and push the minimum of the two (so the result is one of [0,1,2,3,4],
             # where the values are mapped like this: 1..3→1..3; 4..9→4; 10..19→0; 20..23→0..3; 24..29→4; 30,31→0,1)
 …thŠØ       # Push dictionary string "th standards"
      3ô     # Split it into parts of size 3: ["th ","sta","nda","rds"]
        sè   # Swap and index the integer into this list (4 wraps around to index 0)
          ¨  # And remove the trailing character from this string
ð            # Push a space " "
”……‚æ‡‰…ä†ï€¿…Ë…ê†Ä…æ…Ì…Í”
             # Push dictionary string "December January February March April May June July August September October November"
 #           # Split on spaces
  ®          # Push the list of truthy/falsey values from the register again
   O         # Get the amount of truthy values by taking the sum
    è        # Use that to index into the string-list of months (12 wraps around to index 0)
J            # Join everything on the stack together to a single string
             # (and output the result implicitly)
```
[See this 05AB1E tip of mine](https://codegolf.stackexchange.com/a/166851/52210) to understand why:
* (section *How to use the dictionary?*) `”……‚æ‡‰…ä†ï€¿…Ë…ê†Ä…æ…Ì…Í”` is `"December January February March April May June July August September October November"`
* (section *How to use the dictionary?*) `…thŠØ` is `"th standards"`
* (section *How to compress large integers?*) `•ΘÏF•` is `5254545`
[Answer]
# bash, ~~82~~ 80 bytes
-2 bytes thanks to @ASCII-only
```
a=(th st nd rd);set `printf "%(%e %B)T" $[$1*86399]`;echo $1${a[$1%30%20]-th} $2
```
[TIO](https://tio.run/##HclNCsMgEAXgfU8xBAUNFPwhEgnZ9AzdlUBso5hNWqK7kLNbJ4v3eN/M26VYAuNHcSPLEVKGbYF94UPyGebfvm45QEMZ9UAf/NkAeRHZ9kZbO82D/8QvEEkOV69UC6rEdM/xBKLKeQsga1SNxo2QKIlU1w@prq/FJWp1PRbSILXpyh8)
# bash +GNU date, 77 bytes
```
a=(th st nd rd);set `date -d@$[$1*86399] +%e\ %B`;echo $1${a[$1%30%20]-th} $2
```
[Answer]
# Shell + coreutils, ~~112~~ 90 bytes
```
date -d0-12-31\ $1day +%-dth\ %B|sed 's/1th/1st/;s/2th/2nd/;s/3th/3rd/;s/\(1.\).. /\1th /'
```
[Try it online!](https://tio.run/##HcqxCsMgFEbh3af4h4S0FDVXaZZsfY2YwXIFCyGBKJSC725tt4/DefoU6zu@toAzeMaGUrAs6Das6ww@kEKGlC1U9jlA8ijJSEsOHbH/4NZLztGhf5QUGEPSlKOmlPWctGk0O/9oG@35p7uQcleloF17oYfKxx4qCSOssNNdTKMg@gI "Bash – Try It Online") Link includes test cases. Edit: Saved 22 bytes thanks to @NahuelFouilleul. Explanation:
```
date -d0-12-31\ $1day
```
Calculate the number of day(s) after the first day preceding a non-leap year. (Sadly you can't do relative date calculations from `@-1`.)
```
+%-dth\ %B|sed
```
Output the day of month (without leading zero), `th`, and the full month name.
```
's/1th/1st/;s/2th/2nd/;s/3th/3rd/;
```
Fix up `1st`, `2nd`, `3rd`, `21st`, `22nd`, `23rd` and `31st`.
```
s/\(1.\).. /\1th /'
```
Restore `11th` to `13th`.
[Answer]
# [Jelly](https://github.com/DennisMitchell/jelly), ~~115~~ ~~114~~ ~~101~~ 97 bytes
```
%30%20¹0<?4Ḥ+Ø½ị“thstndrd”ṭ
“5<Ḟ’b4+28ÄŻ_@µ>0T,>0$ƇZṪµ1ịị“£ṢtẒ⁽ẹ½MḊxɲȧėAṅ ɓaṾ¥D¹ṀẏD8÷ṬØ»Ḳ¤,2ịÇƊṚK
```
[Try it online!](https://tio.run/##y0rNyan8/1/V2EDVyODQTgMbe5OHO5ZoH55xaO/D3d2PGuaUZBSX5KUUpTxqmPtw51ouoIipzcMd8x41zEwy0TayONxydHe8w6GtdgYhOnYGKsfaox7uXHVoqyFQM0T/ocUPdy4qebhr0qPGvQ937Ty01/fhjq6Kk5tOLD8y3fHhzlaFk5MTH@7cd2ipy6GdD3c2PNzV72JxePvDnWuATtj9cMemQ0t0jIAmHW4/1vVw5yzv/8ZmpkE6QHN17YAu0gEKb3rUtCbyPwA "Jelly – Try It Online")
Long by Jelly standards, but done from first principles. 
Thanks to @JonathanAllan for saving 13 bytes through better understanding of string compression. 
[Answer]
# Google Sheets, ~~118~~ ~~103~~ 86 bytes
```
=day(A1+1)&mid("stndrdth",min(7,1+2*mod(mod(day(A1+1)-1,30),20)),2)&text(A1+1," mmmm")
```
I can't edit [my comment](https://codegolf.stackexchange.com/a/181469/30134) so, here's a working version of the Google Sheets code.
[Try it Online!](https://docs.google.com/spreadsheets/d/161NlGfTcky849Ye0A3qLxoaSF8ic2UvBiBQ9yX-ahsg/edit?usp=sharing)
[Answer]
# [Red](http://www.red-lang.org), 124 bytes
```
func[n][d: 1-1-1 + n - 1[rejoin[d/4 either 5 > t: d/4 % 30 % 20[pick[th st nd rd]t + 1]['th]]pick system/locale/months d/3]]
```
[Try it online!](https://tio.run/##Tcy/DoIwEAbwnaf4FuNgCC0IA4MP4drcYGhJq1BIew4@fS2DYC65/HJ/vmB0uhutqBj7NL79oDwp3UOWuXCBRwmpgnkuzitdXWEcWxPQ4gbusU1OaERutVCrG16KLSLDawRNnBMkqTNbom2J@Ils5mpahsdkqnnxbGMOaYjSGpxnjJDFT/Wu5lDX7u7ETnl8tX/HIn0B "Red – Try It Online")
Adds `n` - 1 days to 1-1-1 (1-Jan-2001) to form a date, than uses Arnauld's method to index into month suffixes. Too bad [Red](http://www.red-lang.org) is 1-indexed, this requires additional tweaking. The good thing is that [Red](http://www.red-lang.org) knows the names of the months :)
[Answer]
# APL(NARS), 235 chars, 470 bytes
```
{k←↑⍸0<w←+\v←(1-⍵),(12⍴28)+13561787⊤⍨12⍴4⋄k<2:¯1⋄d←1+v[k]-w[k]⋄(⍕d),({d∊11..13:'th'⋄1=10∣d:'st'⋄2=10∣d:'nd'⋄3=10∣d:'rd'⋄'th'}),' ',(k-1)⊃(m≠' ')⊂m←'January February March April May June July August September October November December'}
```
13561787 is the number that in base 4 can be summed to (12⍴28) for obtain the lenght of each month...
test:
```
  f←{k←↑⍸0<w←+\v←(1-⍵),(12⍴28)+13561787⊤⍨12⍴4⋄k<2:¯1⋄d←1+v[k]-w[k]⋄(⍕d),({d∊11..13:'th'⋄1=10∣d:'st'⋄2=10∣d:'nd'⋄3=10∣d:'rd'⋄'th'}),' ',(k-1)⊃(m≠' ')⊂m←'January February March April May June July August September October November December'}     
  ⊃f¨1 2 3 365 60 11
1st January  
2nd January  
3rd January  
31st December
1st March    
11th January 
```
[Answer]
# [C (gcc)](https://gcc.gnu.org/), ~~174~~ 155 bytes
```
i;char a[99],*b="thstndrd";f(long x){x--;x*=86400;strftime(a,98,"%d   %B\0",gmtime(&x));i=*a==49?0:a[1]-48;a[2]=b[i=i>3?0:i*2];a[3]=b[++i];x=*a==48?a+1:a;}
```
[Try it online!](https://tio.run/##JY7dioMwFITv8xQHly5R46LVLdo0FvY1bC5Sfw/UtMQUhNJnt9G9m/mYga@O@rpevlDXt2fTniyO7c9QLsjrQRlQVVFIFlyFZ4fJ6sY0Hu/o7a57mP3XHEV8DkR@yOKYT9Z065sqVuTM2zUAsPu7xB7rx41/z77PUQRKiKw4x0dVJTLKcq6qvRTXCgWWqcMY7KVj6crCECWf/y/5WYXJUfH3QlBbGBVq6sNrK8gJ6e6Gokg4IJwEpIdfl8JwXcDDuFFHNydROq3poj0GyKCj6KTImxDT2qfREG9l@QA "C (gcc) – Try It Online")
[Answer]
# [Vyxal](https://github.com/Vyxal/Vyxal) `ṡ`, 81 bytes
```
kṁ¦Ṫ0p-'0>;:L`ƛǓ ⟇∩ ∨₄ ∨⋏ λ√ ∨ɾ ∨∑ ⟇τ ∨₆ ∨Þ ∨∞ ⟑√`⌈$i$t:t:4<[` ∨ǐ`3/vḢȮ‹i|‛th]$_+
```
[Try it Online!](https://lyxal.pythonanywhere.com?flags=%E1%B9%A1&code=k%E1%B9%81%C2%A6%E1%B9%AA0p-%270%3E%3B%3AL%60%C6%9B%C7%93%20%E2%9F%87%E2%88%A9%20%E2%88%A8%E2%82%84%20%E2%88%A8%E2%8B%8F%20%CE%BB%E2%88%9A%20%E2%88%A8%C9%BE%20%E2%88%A8%E2%88%91%20%E2%9F%87%CF%84%20%E2%88%A8%E2%82%86%20%E2%88%A8%C3%9E%20%E2%88%A8%E2%88%9E%20%E2%9F%91%E2%88%9A%60%E2%8C%88%24i%24t%3At%3A4%3C%5B%60%20%E2%88%A8%C7%90%603%2Fv%E1%B8%A2%C8%AE%E2%80%B9i%7C%E2%80%9Bth%5D%24_%2B&inputs=144&header=&footer=)
What a mess.
```
kṁ                                                # List of month lengths
  ¦                                               # Cumulative sums
   Ṫ0p                                            # Pop off the last and prepend a 0
      -                                           # Subtract from input
       '0>;                                       # Filter by positive
           :L                                     # Duplicate and get length
             `...`⌈$i                             # Index into list of month names
                     $t:t                         # Get the last digit
                         :4<[                     # If it's less than 4 then...
                             `...`                # Push ' standard'
                                  3/              # Split into 3
                                    vḢ            # Lop off the first char of each
                                      Ȯ‹i         # Index the number into this
                                         |   ]    # Else
                                          ‛th     # Push 'th'
                                              $_+ # Swap, pop and concatenate
                                                  # (ṡ flag) join stack by spaces
```
]