DateDiff counts the number of changes. When you're looking at DateDiff("m",
#28-Feb-2007#, #01-Mar-2007#), because you're looking at months, it counts
how many times the month changes between the two dates, and (correctly)
returns 1.
DateDiff("ww", #28-Feb-2007#, #18-Mar-2007#) returns 3, because the week
changes 3 times between those two dates. 3/4.3333 returns
0.692313017792444, but when you apply a format of "0", that gets rounded to
1.
It sounds as though you want the number of full months between the two
dates. In other words, you want DateDiff("m", #28-Feb-2007#, #27-Mar-2007#)
to return 0, but DateDiff("m", #28-Feb-2007#, #28-Mar-2007#) or
DateDiff("m", #28-Feb-2007#, #29-Mar-2007#) to return 1.
To accomplish that, check whether the day of the second date is less than
the day of the first date, and subtract 1 from what DateDiff returns if it
is:
DateDiff("m", Date1, Date2) - IIf(Day(Date1) > Day(Date2), 1, 0)