[Question]
  [
Given a date as input in any convenient format, output a calendar with that date as the exact center of a five-week window. The header of the calendar must include the two-letter abbreviations for the days of the week (i.e., `Su Mo Tu We Th Fr Sa`). Three-letter or other abbreviations of the days are not allowed.
For example, given `April 2 2019` as input, the output should be
```
Sa Su Mo Tu We Th Fr
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31  1  2  3  4  5
 6  7  8  9 10 11 12
13 14 15 16 17 18 19
```
so that the given date is the exact middle of the calendar.
Given `February 19 2020`, output
```
Su Mo Tu We Th Fr Sa
 2  3  4  5  6  7  8
 9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
 1  2  3  4  5  6  7
```
For `September 14 1752`, show the following:
```
Mo Tu We Th Fr Sa Su
28 29 30 31  1  2  3
 4  5  6  7  8  9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  1
```
---
* Input and output can be given by [any convenient method](http://meta.codegolf.stackexchange.com/q/2447/42963).
* The input is guaranteed non-empty and valid (i.e., you'll never receive `""` or `Feb 31` etc.).
* Assume Gregorian calendar for all dates.
* Leap years must be accounted for.
* Input dates will range from `Jan 1 1600` to `Dec 31 2500`.
* You can print it to STDOUT or return it as a function result.
* Either a full program or a function are acceptable.
* Any amount of extraneous whitespace is acceptable, so long as the characters line up appropriately.
* Leading zeros on the single-digit days are allowed, as are aligning the single-digit days to be left-aligned instead.
* [Standard loopholes](http://meta.codegolf.stackexchange.com/q/1061/42963) are forbidden.
* This is [code-golf](/questions/tagged/code-golf "show questions tagged 'code-golf'") so all usual golfing rules apply, and the shortest code (in bytes) wins.
  
[Answer]
# [R](https://www.r-project.org/), ~~77~~ 72 bytes
```
function(d,`~`=format)write(c(strtrim(d+-3:3~"%a",2),d+-17:17~"%e"),1,7)
```
[Try it online!](https://tio.run/##DctBCoQwDEDR/ZxCAkLCRG3roiDjzoNY1EIXKsSIO6/e6fI/@JJj9WuqHO9j0XQeuPL8zmM8ZQ9KjyTdcMFLRSXtuH6bfuhfqAOwIy5p/WB9gQ2ILXvKEcPVTqFs4IwznXGdNUD0yX8 "R – Try It Online")
Fixed output to use 2 letter day abbreviations.
-1 byte using `strtrim` thanks to [Aaron Hayman](https://codegolf.stackexchange.com/users/85453/aaron-hayman).
Pads date numbers with leading 0s; takes input as a `Date`, which can be created by using `as.Date("YYYY/MM/DD")`.
Weirdly short for an R [ascii-art](/questions/tagged/ascii-art "show questions tagged 'ascii-art'") answer...
[Answer]
# [05AB1E](https://github.com/Adriandmen/05AB1E/wiki/Commands), ~~175~~ ~~174~~ ~~172~~ ~~171~~ 160 [bytes](https://github.com/Adriandmen/05AB1E/wiki/Codepage)
```
¦WΘ1š-1šVтFY`2ô0Kθ4ÖUD2Qi\28X+ë<7%É31α}‹iY¬>0ëY1¾ǝDÅsD12‹i>1ë\1Dǝ¤>2}}ǝVY})DJIJk18+£35.£¬.•4ιõ÷‡o‹ƶ¸•2ôs`UÐ3‹12*+>13*5÷s3‹Xα©т%D4÷®т÷©4÷®·()DćsćsO7%._s€нT‰J«7ô»
```
Input in the format `[day, month, year]`. Output with leading `0`s for single-digit days, and lowercase `mo` through `su` (+1 byte can be added if titlecase is mandatory).
**[Try it online](https://tio.run/##yy9OTMpM/f//0LLwczMMjy7UBeKwi01ukQlGh7cYeJ/bYXJ4WqiLUWBmjJFFhPbh1Tbmqoc7jQ3Pbax91LAzM/LQGjuDw6sjDQ/tOz7X5XBrsYuhEUjczvDw6hhDl@NzDy2xM6qtPT43LLJW08XL0yvb0EL70OIgY1MgcWiN3qOGRSbndh7eenj7o4aF@UCdx7Yd2gEUBNpdnBB6eIIxUMjQSEvbztBYy/Tw9mIQP@LcxkMrLzapupgc3n5o3cUmILkSzDy0XUPT5Uh7MRD5m6vqxRc/alpzYW/Io4YNXodWmx/ecmj3///RhpY6RjpGBkYGsQA) or [verify all test cases](https://tio.run/##JY1RS8JQFMe/SghC6k127iZzEfPlImQPEqg5VLKgBwkymAY@DMYgoreeohcf1AhkIxLMKVEP51Z7G/kV9kXWteCcw@//g8O/a56cds7iq8T@xWW/t7uVKAxIotzv/QcyiPHpKHyAr9GO2NraKRptyufSQbhU@H2V0cNOk@brGe7uqUl@K0M4syJ71THQ0yXuGoAfwZDxa5MB3XgduNsEFgzxUaeWFQxrhpVipUHpHPIZnMi5LE7Qy0b2WAlX/JX7kT3qisfvBS6FFNVmu8rvZKGApjM6yOkc981NrocznK6dJFO4j89rR9zpH6K/nWKfN6aYsprMHpuR4/28VyL7pYSuyuf4FhNcFCrFphU3GpQohEqgtUgDNEIFU2nDCtEIqDkqmMoEKAFNklqtXw).**
Holy shit.. This might be my new record for longest 05AB1E answer, and then I include some very complex [ascii-art](/questions/tagged/ascii-art "show questions tagged 'ascii-art'") challenges I did... >.> [EDIT: Hmm ok, almost.. ;p](https://codegolf.stackexchange.com/a/170427/52210)
**Important note:** 05AB1E doesn't have any builtins for Date objects or calculations. The only builtin regarding dates it has is today's year/month/day/hours/minutes/seconds/microseconds.
So because of that, almost all of the code you see are manual calculations to calculated the previous and next days (including transition over years and keeping in mind the leap years), and calculating the day of the week by using [Zeller's congruence](https://en.wikipedia.org/wiki/Zeller%27s_congruence).
Huge parts of the code are copied from [this earlier 05AB1E answer of mine](https://codegolf.stackexchange.com/a/173126/52210), which will also be relevant for the explanation below.
**Explanation:**
We start by going to the first day of the previous month:
```
¦          # Remove the first item (the days) from the (implicit) input
 W         # Get the minimum (without popping the list itself)
           # (since the year is guaranteed to be above 1599, this is the month)
  Θ        # Check if its exactly 1 (1 if 1, 0 if in the range [2,31])
   1š      # Prepend a 1 as list (so we now have either [1,1] or [1,0]
     -     # Subtract this from the month and year
      1š   # And prepend a 1 for the day
        V  # Pop and store this first day of the previous month in variable `Y`
```
Then I use that date as start date, and calculate the next 100 days:
```
тF    # Loop 100 times:
  Y`2ô0Kθ4ÖUD2Qi\28X+ë<7%É31α}‹iY¬>0ëY1¾ǝDÅsD12‹i>1ë\1Dǝ¤>2}}ǝV
      #  Calculate the next day in line
      #  (see the linked challenge above for a detailed explanation of this)
   Y  #  And leave it on the stack
 })   # After the loop: wrap the entire stack into a list, which contains our 100 days
```
Then, with the input-date as the middle, I only leave the 17 before and 17 after that input-date from the list:
```
DJ          # Duplicate the 100 dates, and join the day/month/year together to strings
  IJ        # Push the input, also joined together
    k       # Get the 0-based index of the input in this list
            # (the joins are necessary, because indexing doesn't work for 2D lists)
     18+    # Add 18 to this index (18 instead of 17, because the index is 0-based)
        £   # Only leave the first index+18 items from the 100 dates
     35.£   # Then only leave the last 35 items
```
Now we have our 35 days. Next step is to calculate the day of the week, and create the header of the output-table:
```
¬                # Get the first date of the list (without popping the list itself)
 .•4ιõ÷‡o‹ƶ¸•    # Push compressed string "sasumotuwethfr"
             2ô  # Split it into chunks of size 2
s                # Swap to get the first date again
 `UÐ3‹12*+>13*5÷s3‹Xα©т%D4÷®т÷©4÷®·()DćsćsO7%
                 # Calculate the day of the week (sa=0; su=1; ...; fr=6)
                 # (see the linked challenge above for a detailed explanation of this)
  ._             # Rotate the list of strings that many times
```
[See this 05AB1E tip of mine (section *How to compress strings not part of the dictionary?*)](https://codegolf.stackexchange.com/a/166851/52210) to understand why `.•4ιõ÷‡o‹ƶ¸•` is `"sasumotuwethfr"`.
Then we create the days to fill the table itself based on our earlier created list of dates. Which we'll merge together with the header. After which we can print the final result:
```
s           # Swap to get the list of dates again
 €н         # Only leave the first item of each date (the days)
   T‰       # Take the divmod 10 of each
     J      # Join those divmod results together
            # (we now have leading 0s for single-digit days)
      «     # Merge this list together with the header list
       7ô   # Split it into chunks of size 7
         »  # Join each inner list by spaces, and then each string by newlines
            # (and output the result implicitly)
```
[Answer]
# JavaScript (ES6), ~~141~~ 126 bytes
*Saved 15 bytes by borrowing `.toUTCString().slice(0,2)` from [Neil's answer](https://codegolf.stackexchange.com/a/182691/58563)*
Takes input as a Date object.
```
f=(d,n=0)=>n<42?(D=new Date(d-864e5*(24-n)),n<7?D.toUTCString().slice(0,2):(i=D.getDate())>9?i:' '+i)+`
 `[++n%7&&1]+f(d,n):''
```
[Try it online!](https://tio.run/##fc2xTsMwFIXhvU/hhdoX25FtuQRHTTOQiQGGlqmq1ChxIqPIrhoLxNOHpgMqomW@9//Oe/VRDfXRHSL3obHj2OakYT4XkK/8UquClLm3n6isoiUNf3zQdnFPlOYegPllWpRJDG@bp3U8Ot8RSIbe1ZYIpiAjLi@TzsZzC7AyhcswwtQB3c/Qfkupv0vnc7mj7bQJGcZjHfwQepv0oSM/u3DaeF6/vkz8oXeR4A2GrdghijAiMTTVF2CYXbbtRQ2/T1gJabjQXKjb0fTDkOaSIaSuCEqcci7Nf4ISDKlJkOaPINOF4sJwqW8L0w9D5izokzB@Aw "JavaScript (Node.js) – Try It Online")
[Answer]
# [JavaScript (Node.js)](https://nodejs.org), ~~205~~ ~~152~~ 145 bytes
```
f=
d=>`012345`.replace(g=/./g,r=>`0123456
`.replace(g,c=>`${new Date(d-864e5*(24-c-r*7))[+r?`getUTCDate`:`toUTCString`]()}`.slice(0,2).padStart(3)))
```
```
<input type=date oninput=o.textContent=f(this.valueAsDate)><pre id=o>
```
[Try it online!](https://tio.run/##fc29bsIwFAXgnadAiMGGXGNfEsKPQgf6BpQJIdlyHCsoiiPHggHx7KnpgLq029U5n869qpvqta@7AK0rzVAVQ1nsJRe4TDPJvOkapQ2xxYItbOLf1Wr0q0x0zKeP1tzHnyoYUsJ6lZpsRjAFDX6WU3qe@w9pTTh9HV5EbmVw8T4GX7dWXgh9StY3dVzjCVLWqfIYlA9kSSkdtGt71xjWOEsq8n4zQS42IDggTiLbjf52yIEjiM3/TuQZAo@T6Y8bvgE "JavaScript (Node.js) – Try It Online") Takes input as JavaScript Date object or timestamp. Edit: Saved 1 byte thanks to @EmbodimentofIgnorance, which then allowed me to save a further 7 bytes by adding a trailing newline to the output. Saved 52 bytes when I discovered that I was working around behaviour that was not actually buggy in the first place...
[Answer]
# [Perl 6](https://github.com/nxadm/rakudo-pkg), 87 bytes
```
{~rotate(<Th Fr Sa Su Mo Tu We>,.day-of-week),|comb 21,($_-17..$_+17)>>.day.fmt('%2d')}
```
[Try it online!](https://tio.run/##FYxdC4IwGIXv@xUvYrnRHG5YIpRX0V1XCt0EsnKjL10sRSTrr695dZ6HczgvaZ5rWw@wULC1n5/RrWgl2hRX2BvIBeQdHDQUHRxlRmglhlCrsJfygcl40fUZOCPIL0OWUOqXS5bgLJtmVNUtCua8CvDXvsUACu3cM21kj0a/xJje9a1B3qnxMIEpQGkzQzxiKYGYAMdkMh45JMDSSVmycux6FmP7Bw "Perl 6 – Try It Online")
Takes a `Date` object, returns a list of lines.
[Answer]
# [C# (Visual C# Interactive Compiler)](http://www.mono-project.com/docs/about-mono/releases/5.0.0/#csc), ~~124~~ 120 bytes
```
n=>{for(int i=0;i<42;)Write($"{(i<7?$"{n.AddDays(i-3):ddd}".Remove(2,1):n.AddDays(i-24).Day+""),3}"+(++i%7<1?"\n":""));}
```
[Try it online!](https://tio.run/##TY5BCoMwFET3PYWEFn5IFE0tUhMVwROUQjfdiInwF0bQ0FLEs6fZFLqa4c1bzLDGw4q@HRzOVnW9M3ecTD1W3lb1Ns4LoHURVqlElQtJHws6A0eyAaqiCWmTVuuu/6yA8ZmWWuudJDczzS8Dgme0/BdETpNQGSGUn3fCgDE8FSpryNOSMlAqdy8PI1jzjn5nQKTZlef8Elb/BQ "C# (Visual C# Interactive Compiler) – Try It Online")
[Answer]
# [Wolfram Language (Mathematica)](https://www.wolfram.com/wolframscript/), 123 bytes
```
(s=#;Grid@Join[{StringTake[ToString@DayName[s~d~#]&/@Range[-3,3],2]},Partition[Last@d[s,#]&/@Range[-17,17],7]])&
d=DatePlus
```
[Try it online!](https://tio.run/##TcyxCsIwEIDh3acQCkXhxDYdikghQ0EQkaLdjgyHCTFoU2jOQUr76lFwcfzh4@@I76YjdjeKtoqrUCX7w@C0PPbO43jlwXnb0sNg2/9C1vQ@U2cwzHpOVLqVF/LW4KaAQoFQEzQ0sGPXezxRYKkxwL/LS8hLBaVS63Shq5rYNM9XiM33zktpcRSZyEBAvptUjB8 "Wolfram Language (Mathematica) – Try It Online")
I don't know why `Grid` doesn't work on TIO but this code outputs this 
[![enter image description here](https://i.stack.imgur.com/tzGlX.png)](https://i.stack.imgur.com/tzGlX.png)
@DavidC saved 1 byte
[Answer]
# [MATL](https://github.com/lmendo/MATL), ~~34~~ ~~33~~ 31 bytes
```
YO-17:17+t7:)8XOO3Z(!1ew7XOU7e!
```
[Try it online!](https://tio.run/##y00syfn/P9Jf19DcytBcu8TcStMiwt/fOEpD0TC13DzCP9Q8VfH/f3W31KSi0sSiSgVDSwUjAyMDdQA "MATL – Try It Online")
### Explanation
```
YO       % Implicit input. Convert to date number. This is a single number
         % that specifies the date
-17:17   % Push [-17 -16 ... 16 17]
+        % Add to date number, element-wise. This gives a row vector of 35
         % date numbers centered around the input date
t        % Duplicate
7:       % Push [1 2 ... 7]
)        % Index into the 35-element vector. This keeps the first 7 entries
8XO      % Convert to day-of-week in 3 letters. Gives a 3-col char matrix
O3Z(     % Write char 0 (equivalent to space for display purposes) into the
         % 3rd column
!1e      % Tranpose and linearize into a row. This produces a string such as
         % 'Tu We Th Fr Sa Su Mo ', to be used as column headings
w        % Swap. This brings to top the row vector of 35 date numbers
         % computed from the input
7XO      % Convert to day-of-month. Gives a 2-col char matrix
U        % Convert each row to number
7e!      % Reshape into 7-row matrix and transpose
         % Implicit display. This prints the string with the headings and
         % the matrix. The latter has a minimum-one-space separation between
         % columns, so it is aligned with the headings
```
[Answer]
# [Java (JDK)](http://jdk.java.net/), 149 bytes
```
d->{d.add(5,-24);for(int i=0,w;i<42;d.add(5,1))System.out.printf("%c%2s",i%7<1?10:32,i++<7?"SaSuMoTuWeThFr".substring(w=d.get(7)%7*2,w+2):d.get(5));}
```
[Try it online!](https://tio.run/##jVFha9swEP2eXyEMASlRNFtLMInjltFuEFjXDw6MbYyhynKq1JGMda4pJb89s504jC6MfRCS7r27e@9uK57FZJs@HfSusCWgbfNnFeicjaLBX7GsMhK0NW9B0DvVxmQunEN3Qhv0OkCoqB5yLZEDAc31bHWKdg2GEyi12fz4iUS5caSjInRjjat2qlzeiFyZVJRXKEPxIZ1cvaZMpCme0QmfkiizJdYGkI59Wkd6OeVRjweEJC8O1I7ZCljRNIEMe0M55M6jehgug@vAX7znVI/Hy/DaS0RS3dl19VWtHz@VHnPVg@uk4TpO2UYBDskwHHFajzlZHCMzQqL9Ieokf7ZS5LcCVGMFlAOH4pOZPzBmM8z9YE6nlBN6GeU@5TSYX4aDcMbpnAbTE7w/Nm/ncOZ17RdHEe1AT3X6USLZP@JzrHWzMs1ujFSYRKeMnsicgnWzVWxUjdoOuK3NBCQgSrjPbsUL/m6NWqWtRO9Dszgtxbsvqv71zZZPHiEM7MfCysdESWtSTNAIBb7vN@Pr1b3dVW6wtzJF1Rjx0Lgzc9Z1iXtfQUv2zqSMCSlVAbh38a/0/8D2g/bsD78B "Java (JDK) – Try It Online")
## Credits
* -13 bytes thanks to [Kevin Cruijssen](https://codegolf.stackexchange.com/users/52210/kevin-cruijssen).
[Answer]
# [PHP](https://php.net/), ~~197~~ ~~189~~ 187 bytes
```
for($d=date_create($argn)->sub($i=new DateInterval(P17D)),$i->d=1;$x++<35;$h.=$x<8?substr($d->format(D),0,2).' ':'',$d->add($i))$o.=str_pad($d->format(j),3,' ',2);echo wordwrap($h.$o,20);
```
[Try it online!](https://tio.run/##TZBfS8MwFMXf@ynuQyAJy0bbOebssiFMURg48FGkZGtcK1sTbjM3ET97vfuj@Hbvuef8wokvfTue@tKDRXSYo/UOQ1WvRSyzKGLBNqEBDS8RAL/1WG0ghTRORlwdlXu7xJ3BT0hGpKbxWX22Ptjt0iIkV5AMBynJr0R7c2jNqhRwwZoGmMF1DRK@KMcOmpWaOc15Rqtdle58V7B4WOR3T/O/IWuJJVihCxNsviJssOLkld1Js1sKVuna7mFG@mMdLH6YjVgkw5mUilXdSaGTjB06nXF/kLGyp9lhfD2lXBOO1O6E6FsTxEyqWKWyx4HfcK6OF1MUBJeSuZ4md@5N8T/xLlVfkZ1S2anA3mGxR@MFPcOcSulb20u33y7Rd/sD "PHP – Try It Online")
Input is `STDIN` as a date string. Run with `php -nF`.
```
$ echo April 2 2019|php -nF cal.php
Sa Su Mo Tu We Th Fr 
16 17 18 19 20 21 22 
23 24 25 26 27 28 29 
30 31  1  2  3  4  5 
 6  7  8  9 10 11 12 
13 14 15 16 17 18 19 
```
[Verify all test cases](https://tio.run/##TZBfS8MwFMXf@ynuQyAJy0bbOebssiFMURg48FGkZGtcK1sTbjM3ET97vfuj@Hbvuef8wokvfTue@tKDRXSYo/UOQ1WvRSyzKGLBNqEBDS8RAL/1WG0ghTRORlwdlXu7xJ3BT0hGpKbxWX22Ptjt0iIkV5AMBynJr0R7c2jNqhRwwZoGmMF1DRK@KMcOmpWaOc15Rqtdle58V7B4WOR3T/O/IWuJJVihCxNsviJssOLkld1Js1sKVuna7mFG@mMdLH6YjVgkw5mUilXdSaGTjB06nXF/kLGyp9lhfD2lXBOO1O6E6FsTxEyqWKWyx4HfcK6OF1MUBJeSuZ4md@5N8T/xLlVfkZ1S2anA3mGxR@MFPcOcSulb20u33y7Rd/sD "PHP – Try It Online")
Or **[174 bytes](https://tio.run/##RZBdS8MwFIbv@yvORSAJy0ZbHXN22RCmKAwceCkysiWuha0Jp5mbiL@9nn2od8lz3vfhJKEM7WgSygAO0eMCXfAYq3otUlkkCYuuiQ1oeE0A@F3AagM55Gk25OpIHtwSdwY/IRsSzdMzfXEhuu3SIWTXkA36OeE3sr17dGZVCrhoTQPM4LoGCV/UYwfNSs285rygq1uV/jxXMH@cL@6fZ3@HoiWXYFZbE91iRdroxCkru@NmtxSs0rXbw5T4Ux0dfpiNmGeDqZSKVd2x1VnBDp3O6KpfsLKn2WF0M6FeE4/W7pjsWxPFVKpU5bLHgd9yro4TYy3JpWSeWv9JewoVp533Hu0eTRBkZl7l9JPt5Tm/6yff7Q8)** with zero-padded single digits.
[Answer]
# Excel VBA, ~~190~~ 159 bytes
Thanks @TaylorScott
```
Function z(i)
Dim d(5,6)
v=DateValue(i)-17
For x=1To 5
For y=0To 6
d(0,y)=Left(WeekdayName(Weekday(v+y)),2)
d(x,y)=day(v+y+(x-1)*7)
Next y,x
z=d()
End Function
```
Takes input in the form of a valid date string for Excel VBA (e.g. February 19, 2020; 2/19/2020; 19-Feb-2019), and returns an array with the given calendar centered on it.
[Answer]
# [Red](http://www.red-lang.org), ~~153~~ 131 bytes
```
func[d][s: d - 24 loop 7[prin[""copy/part system/locale/days/(s/10) 2]s:
s + 1]loop 5[print""loop 7[prin pad/left s/4 3 s: s + 1]]]
```
[Try it online!](https://tio.run/##Vc2xDsIgAIThnae4MGkMoWCbpt1cfAAdCQMWSEywEKhDnx6buuj6J99ddrbenFWa@LH69zwpq1UZYcEgW4QYE3qV8nNWlE4xrTyZvKCsZXEvHuJkguPWrIUfChfNEVKXkRScIPSOux0vlP5MIRnLg/PbDm9xxvb3FVpXD8kuKTPZiIHsFMETDzGwq3tsWTZ/uWV3l5joO1k/ "Red – Try It Online")
[Answer]
# T-SQL, 203 bytes
```
DECLARE @f date='2020-02-19'
,@ char(20)=0,@d char(105)=0SELECT
@=left(format(d,'D'),2)+' '+@,@d=right(d,2)+char(32-n%7/6*19)+@d
FROM(SELECT dateadd(d,number-17,@f)d,number n
FROM spt_values WHERE'P'=type)x ORDER BY-n
PRINT @+'
'+@d
```
The online version is slightly different, this posted version works in MS-SQL Studio Management. It saves 1 bytes compared with the online version, but doesn't give the correct result online
**[Try it online](https://data.stackexchange.com/stackoverflow/query/1023956/today-is-the-center)**
[Answer]
# [Python 2](https://docs.python.org/2/), 115 bytes
```
from datetime import*
d=input()
for i in range(42):print(d+timedelta(i-24)).strftime('%'+'da'[i<7])[:2]+i%7/6*'\n',
```
[Try it online!](https://tio.run/##Fc3LCsMgEEDRfb5iNkGN9iXS0NB@SZqFoLYD8YGdLvr1FrcXDrf86J2Tbi3UHMFZ8oTRA8aSK02De2AqX@JiCLkCAiaoNr08N1ospWIi7mQXzu9kOR60EeL4oRp65GxkkjnLVrzPm1gXvUkc59N1Ys/EVGv9x/X5clNgFGjxBw "Python 2 – Try It Online")
Not sure if this is allowed... takes input from STDIN in the form `date(year, month, day)`. This can also be represented as `__import__('datetime').date(year, month, day)`. These are really `__import__('datetime').date` objects.
]