以月为单位计算日期差异

本文关键字:日期 计算 为单位 | 更新日期: 2023-09-27 18:12:28

我有一个字段返回年和月的值。例如,20119(2011是年份,9是九月)。我如何将其与当前年份和月份进行比较,以获得月份的差异?例如,在相同的格式中,当前的年份和月份将是20135,因此我要查找的值将是20。20135减去20个月等于20119。可能不确定如何构造公式来使用日期函数动态计算月份的差异。

以月为单位计算日期差异

试试这个

DateTime x1 = DateTime.ParseExact("20119", "yyyyM", CultureInfo.InvariantCulture);
DateTime x2 = DateTime.ParseExact("20135", "yyyyM", CultureInfo.InvariantCulture);
int months =  Math.Abs((x2.Month - x1.Month) + 12 * (x2.Year - x1.Year));

首先,根据你的问题,我认为:

  • 单一日期月份为一位数
  • 年+月的值是一个字符串(如果它是int型,在下面的代码中抛出ToString())
因此,

值的长度将是5-6位。您可以用更少的行来执行下面的代码,但请原谅我冗长的回答—我将添加额外的代码以使其更清楚:

我们可以通过使用date获取当前日期仅作为月/年。现在

// Just want the month/year
DateTime currentDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);

现在我们可以使用子字符串方法获得您的日期以测试当前的年/月(请记住我的假设,我们正在处理字符串值,如果不是,则转换ToString())。

    // breaking out test date to year/month portions and saving as a new date time
    string testDateValue = "20119";
    int testDateYear = Convert.ToInt32(testDateValue.Substring(0, 4));
    int testDateMonth = Convert.ToInt32(testDateValue.Substring(4));
    DateTime testDate = new DateTime(testDateYear, testDateMonth, 1);

现在让我们来看看差值:

// get month dif - remove abs() if want negative if test date in future
int numberOfMonths = Math.Abs(((currentDate.Year - testDate.Year) * 12) + 
  (currentDate.Month - testDate.Month));

现在-如果你想用yyyym格式比较2天,而不是使用当前日期,只需做上面列出的年/月转换,然后在上面执行月差异公式。

为什么不将年份乘以每个日期字段中的月份数,然后返回差值呢?

可以使用。net时间周期库中的类DateDiff来计算月份:

// ----------------------------------------------------------------------
public void CalcMonths( DateTime epoch )
{
  DateDiff dateDiff = new DateDiff( DateTime.Now, epoch );
  Console.WriteLine( "{0} months", dateDiff.Months );
  // > 1 Year 4 Months 12 Days 12 Hours ago
} // CalcMonths

基本上可以拆分字符串。

int a = 201410;
int b= 20139;
int year1 = int.Parse(a.ToString().Substring(0,4));
int year2 = int.Parse(b.ToString().Substring(0,4));
int month1 = int.Parse(a.ToString().Substring(4));
int month2 = int.Parse(b.ToString().Substring(4));
//now construct a date for each
DateTime date1 = new DateTime(year1, month1, 1);
DateTime date2 = new DateTime(year2, month2, 1);
//then subtract them and make it months
int numberOfMonths = ((date1.Year - date2.Year) * 12) + date1.Month - date2.Month;

这是MSDN(链接)上发布的解决方案的代码片段:

DateTime oldDate = new DateTime(2002,7,15);
DateTime newDate = DateTime.Now;
// Difference in days, hours, and minutes.
TimeSpan ts = newDate - oldDate;
// Difference in days.
int differenceInDays = ts.Days;

应该也能工作几年/几个月(类似于下面的内容):

int differenceInMonths = (ts.Years *12 + ts.Months);

希望这将帮助。祝好,AB