I assume you have a separate layout for each month?
In that case you will only need 31 expressions since LAYOUT_NR can refer to the month.
The expressions can be simplified by introducing separate variables that extract the day and month part and return it as a numeric value.
@day01@: IF (@day_part@ = 1 AND @month_part@ = LAYOUT_NR(), ">", "")
@day02@: IF (@day_part@ = 2 AND @month_part@ = LAYOUT_NR(), ">", "")
...
@day_part@: VAL(LEFT([Date], 2))
@month_part@: VAL(MID([Date], 4, 2))
That said, with a separate layout for each month you still need 31 text boxes (or image boxes for a fancier effect) duplicated 12 times each.
Now assuming your database has one record for each recipient, I would suggest using a single layout and making everything variable.
In the layout properties, set Number of Copies to 12. You can then calculate the month index using PAGE_NR and MOD:
@day01@: IF (@day_part@ = 1 AND @month_part@ = @month@, ">", "")
@day02@: IF (@day_part@ = 2 AND @month_part@ = @month@, ">", "")
...
@month@: MOD(PAGE_NR() - 1, 12) + 1
Assuming you have a background PDF containing 12 pages, one for each month, you can simply set the Page Number expression of the image object to "@month@".
If you do it like this, you only need 31 expressions plus 31 objects for the markers.