2

我想找到员工的服务期限,我已经从数据库中获取了员工加入日期,就像这样

ex - 加入日期:2007/03/24

现在我需要找出系统日期和加入日期之间的区别,如果有人能知道,请帮助我,谢谢。

我为获得答案而编写的示例代码,但它无法正常工作

 public TimeSpan periodOfService
       {
           get
           {
                //DateOfJoin-->which i get from my database
               DateTime  JoinDate   = Convert.ToDateTime(DateOfJoin);
               DateTime TodayData =  DateTime.Now;

               TimeSpan servicePeriod = JoinDate - TodayData;

               return servicePeriod;
           }
   }

输出格式-> 2 年,3 个月
我如何在 Asp.net MVC 4 中做到这一点?

4

4 回答 4

5

首先,交换日期。

您想减去JoinDateTodayData还要修改拼写和命名约定):

public TimeSpan periodOfService
       {
           get
           {
                //DateOfJoin-->which i get from my database
               DateTime  JoinDate   = Convert.ToDateTime(DateOfJoin);
               DateTime TodayData =  DateTime.Now;

               TimeSpan servicePeriod = TodayData - JoinDate;

               return servicePeriod;
           }
   }

不幸的是,OP,TimeSpan以您想要的格式输出这个值比您最初想象的要复杂得多,请参阅以下文章了解如何实现这一点:

http://joelfillmore.com/years-and-months-between-dates/

我建议您阅读它建议的解决方案,然后研究使用该方法:

public DateSpan(DateTime startDate, DateTime endDate)
于 2013-10-25T09:38:36.290 回答
-1

通常,您将使用 aTimeSpan来表示日期之间的差异,但您将差异显示为年份和月份的要求TimeSpan不合适。相反,您可以创建一个类来表示差异:

class DateDifference {

  public DateDifference(Int32 years, Int32 months) {
    Years = years;
    Months = months;
  }

  public Int32 Years { get; private set; }

  public Int32 Months { get; private set; }

}

您可以使用简单的算术计算两个日期之间的差异:

DateDifference GetDateDifference(DateTime first, DateTime second) {
  if (second < first)
    throw new ArgumentOutOfRangeException("second", "The second date cannot occur before the first.");
  var years = second.Year - first.Year;
  var months = second.Month - first.Month;
  if (second.Month < first.Month) {
    years -= 1;
    months += 12;
  }
  return new DateDifference(years, months);
}

然后,您可以在代码中使用该函数:

var dateDifference = GetDateDifference(JoinDate, TodayDate);
于 2013-10-25T10:28:22.397 回答
-1

这将为您提供两个日期之间的差异,无论它是在未来还是过去。如果日期无效,则返回零跨度

public TimeSpan periodOfService
{
    get
    {
        DateTime JoinDate;
        if (DateTime.TryParse(DateOfJoin, out JoinDate))
        {
            return DateTime.Now > JoinDate ? DateTime.Now - JoinDate : JoinDate - DateTime.Now;
        }
        return TimeSpan.Zero;
    }
}
于 2013-10-25T16:37:35.893 回答
-3

您可以获得总日差并将其转换为月份和年份,这里有一个简单的示例

TimeSpan servicePeriod = TodayData - JoinDate;
string result = string.Format("{0} Years, {1} Months, {2} Days", servicePeriod.TotalDays / 365, servicePeriod.TotalDays / 30, servicePeriod.TotalDays);

你可以返回一个字符串而不是时间跨度

于 2013-10-25T09:58:26.600 回答