This issue has nothing to do with milliseconds, or the time part of the date.
The simple issue is that this:
12/01/2024 + 30 = 10/02/2024 12
No!!! The above is wrong!
January has 31 days.
You add 1 + 30, the result is 31.
Same goes for this:
12 January 2024 + 30 = 10 February 2024 correct result
No, you get February 11, NOT the 10th!
Build a test form with a calendar control.
Say like this:

And code behind for this form is this:
private void button1_Click(object sender, EventArgs e)
{
DateTime dtStart = monthCalendar1.SelectionStart;
textBox1.Text = dtStart.AddDays(30).ToString();
}
private void button2_Click(object sender, EventArgs e)
{
DateTime dtStart = monthCalendar1.SelectionStart;
textBox2.Text = dtStart.AddMonths(1).ToString();
}
So, if you have Jan 1st, then adding 30 days gives you Jan 31st!
You can't use, nor assume that 30 days = one month (it DOES NOT!!!).
As above shows, you can use AddMonths(1), and you get the expected result.
So, say this:

So, note above when we select Jan 1st. We add 30 days, we get the 31st!
But, when we add ONE month, then we get the 1st of the next month, since AddDays has "knowledge" of the number of days in a month. The same goes for the above when I select Jan 10th. Adding 30 days gives Feb 9, but using AddMonth(1) gives Feb 10.
So, all the math and functions are correct, but we are LEAVING OUT that January has 31 days, and not 30 days.
We cannot assume, think or write code that assumes 30 days in a month, since as above shows, that simply not the case.