我想找到员工的服务期,我已经从数据库中获得了员工加入日期
前加入日期: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中做到这一点?
答案 0 :(得分:5)
首先,交换日期。
您想从JoinDate
中减去TodayData
(同时修改拼写和命名惯例):
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)
答案 1 :(得分:-1)
通常情况下,您会使用TimeSpan
来表示日期之间的差异,但是您需要将差异显示为年份和月份,因此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);
答案 2 :(得分:-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;
}
}
答案 3 :(得分:-3)
你可以获得总日差异并将其转换为月和年 一个简单的样本就在这里
TimeSpan servicePeriod = TodayData - JoinDate;
string result = string.Format("{0} Years, {1} Months, {2} Days", servicePeriod.TotalDays / 365, servicePeriod.TotalDays / 30, servicePeriod.TotalDays);
你可以返回不是时间跨度的字符串