Revision: 30749
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at August 20, 2010 20:36 by nvesic
Initial Code
class DateTimeDiff
{
/// <summary>
/// Difference btweeen dates expressed in years, months and days.
/// </summary>
/// <param name="dtStartDate"></param>
/// <param name="dtEndDate"></param>
/// <param name="YearsDiff"></param>
/// <param name="MonthsDiff"></param>
/// <param name="DaysDiff"></param>
public static void TimeSpanToDate(
DateTime dtStartDate,
DateTime dtEndDate,
out Int32 YearsDiff,
out Int32 MonthsDiff,
out Int32 DaysDiff
)
{
bool bRegularOrder = true; // is the start date before end date
if (dtEndDate < dtStartDate) {
// if the order of dates is reversed, dates are reversed, then difference is computed
// however, we remember that order is reversed, so at the end we put minus before all results componenet
DateTime d3 = dtStartDate;
dtStartDate = dtEndDate;
dtEndDate = d3;
bRegularOrder = false;
}
// compute difference in total months
MonthsDiff = 12 * (dtEndDate.Year - dtStartDate.Year) + (dtEndDate.Month - dtStartDate.Month);
// based upon the days
// adjust months & compute actual days difference
if (dtEndDate.Day < dtStartDate.Day) {
// check if both dates are the last day in the month
if (dtStartDate.Day == DateTime.DaysInMonth(dtStartDate.Year, dtStartDate.Month)
&& dtEndDate.Day == DateTime.DaysInMonth(dtEndDate.Year, dtEndDate.Month)) {
DaysDiff = 0; // whereas month number remains unchanged
}
else {
MonthsDiff--;
Int32 iBrojDanaPrethodnogMesecaZavrsnogDatuma = DayInMonthOfPreviousMonth(dtEndDate);
DaysDiff = Math.Max(0, iBrojDanaPrethodnogMesecaZavrsnogDatuma - dtStartDate.Day)
+ dtEndDate.Day;
}
}
else {
DaysDiff = dtEndDate.Day - dtStartDate.Day;
}
// compute YearsDiff & actual MonthsDiff
YearsDiff = MonthsDiff / 12;
MonthsDiff -= YearsDiff * 12;
// if the order was reversed, put minus sign before all componenet results
if (!bRegularOrder) {
YearsDiff = -YearsDiff;
MonthsDiff = -MonthsDiff;
DaysDiff = -DaysDiff;
}
}
private static Int32 DayInMonthOfPreviousMonth(DateTime dt)
{
Int32 month = dt.Month;
Int32 year = dt.Year;
// previous month
month--;
if (month == 0) {
month = 12;
year--;
}
return DateTime.DaysInMonth(year, month);
}
}
Initial URL
Initial Description
Datetime difference in years, months and days, corrected version of existing snippet called DateTime Difference provided by hnielsen
Initial Title
DateTime difference 2
Initial Tags
Initial Language
C#