day() function in calculated fields / calculation properties

If there were a date() constructor or if you could convert a string into a date you could do a time_between() on the first of the month and the date your trying to get the day from. Unfortunately there’s no way to create a date object.

There is, however, the possibility to use a date literal (which is the date in milliseconds since the beginning of 1970), but it gets complicated if you’re spanning multiple years. The example below assumes all of your dates fall into 2025 (1735603200000). It uses time_between() on your date and the beginning of 2025, then divides by milliseconds per day (86400000), then subtracts days in the year from previous months. It outputs a string like “2025-03-04”. If there are multiple years, as I said, it gets more complicated, but is possible.

concatenate(
number_to_string(year([properties.course_start_date])), "-", 
if((month([properties.course_start_date]) > 9), 

number_to_string(month([properties.course_start_date])), concatenate("0", number_to_string(month([properties.course_start_date])))),"-",

number_to_string(
if( month([properties.course_start_date]) == 1, (round_down(time_between([properties.course_start_date], 1735603200000)/86400000,0)),
if( month([properties.course_start_date]) == 2, (round_down(time_between([properties.course_start_date], 1735603200000)/86400000,0)-31),
if( month([properties.course_start_date]) == 3, (round_down(time_between([properties.course_start_date], 1735603200000)/86400000,0)-59),
if( month([properties.course_start_date]) == 4, (round_down(time_between([properties.course_start_date], 1735603200000)/86400000,0)-90),
if( month([properties.course_start_date]) == 5, (round_down(time_between([properties.course_start_date], 1735603200000)/86400000,0)-120),
if( month([properties.course_start_date]) == 6, (round_down(time_between([properties.course_start_date], 1735603200000)/86400000,0)-151),
if( month([properties.course_start_date]) == 7, (round_down(time_between([properties.course_start_date], 1735603200000)/86400000,0)-181),
if( month([properties.course_start_date]) == 8, (round_down(time_between([properties.course_start_date], 1735603200000)/86400000,0)-212),
if( month([properties.course_start_date]) == 9, (round_down(time_between([properties.course_start_date], 1735603200000)/86400000,0)-243),
if( month([properties.course_start_date]) == 10, (round_down(time_between([properties.course_start_date], 1735603200000)/86400000,0)-273),
if( month([properties.course_start_date]) == 11, (round_down(time_between([properties.course_start_date], 1735603200000)/86400000,0)-304),
if( month([properties.course_start_date]) == 12, (round_down(time_between([properties.course_start_date], 1735603200000)/86400000,0)-334),
0))))))))))))))