It’s related to implicit types of your metadata. Those working are strings, which is what the link() expect to see. The second is an actual date, and the last one is just a number. See Literals - Dataview, as to what is recognised as dates.
To ensure that they’re strings you need to add quotes, but even that is troublesome with the month variant, so one way would be to add a space, but then again that’ll change the value of it as well.
Do also notice that if you use the string() it tries to be smart and present the variables in a variant you might like, which fails for the month variant:
Which has another caveat, that it’s not easily comparable to other dates, so in the end it really depends on your use case of these variables. Will they be used to tested against real dates, or do you mostly need them as links?
(PS! In my test data the T is defined like you did originally, and the L is like this last definition, but hopefully the explanations and images make sense)