DATE2DMY(TODAY,1) gives 28.
DATE2DMY(CALCDATE('CM',DMY2DATE(01,3,2020)),1) gives 31: no. of days in 03/2020
CALCDATE('1M',TODAY) calcs the current day + 1 month: 3/28/20 -> 4/28/20
CalcDate('-28D',Today()) calcs today - 28 days. today = 3/28/2020 -> result = 2/28/2020
CalcDate('-D28',Today()) calcs the nearest 28th day in the past.
today = 3/28/2020 -> result = 2/28/2020, because today is not yet finished, so the next 28th in the past is last month, means february.
today = 3/29/2020 -> result = 3/28/2020, because that is the nearest 28th in the past according 3/29/2020.
CalcDate('D28',Today()) calcs the nearest 28th day in the future.
works like above.