Note that mixing up meta-data (the date) into fieldnames forces superfluous nesting of structures. This poor data design has already allowed one bug into your data: dates with/without leading zeros has allowed duplicates, e.g. for 2021 both of "Apr1" and "Apr01" are listed, as are both of "Apr2" and "Apr02", and as are both of "Apr4" and "Apr04".
Much better data design would store the date as data in its own right: if you have the choice, store the data in an Nx1 structure with a date field (and store the date as datetime or a datevector or anything more robust than those strings).
But given what you have described:
F1 = struct('A',11,'B',12);
F2 = struct('A',21,'B',22);
F3 = struct('A',31,'B',32);
S = struct('Mar23_2021',F1, 'Apr2_2021',F2, 'Apr10_2021',F3)
S =
Mar23_2021: [1×1 struct]
Apr2_2021: [1×1 struct]
Apr10_2021: [1×1 struct]
D = datetime(F,'InputFormat','MMMd_yyyy');
T = struct2table(vertcat(C{:}));
T.date = D
T =
A B date
__ __ ___________
11 12 23-Mar-2021
21 22 02-Apr-2021
31 32 10-Apr-2021