计算MVC 5中两个日期时间之间的差异

时间:2017-04-26 20:51:51

标签: c# asp.net asp.net-mvc

我正在使用Entity Framework学习ASP.NET和MVC,这就是为什么这个问题对你们中的一些人来说似乎微不足道。

我的目标相对简单: 我有一个这样的模型(Hour.cs):

public class Hour
{
    public int ID { get; set; }
    public int UsrID { get; set; }
    [DataType(DataType.Time)]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:HH:mm}")]
    public DateTime StartDateTime { get; set; }
    [DataType(DataType.Time)]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:HH:mm}")]
    public DateTime EndDatetime { get; set; }
    public int? ProjectID { get; set; }
    public virtual Project Project { get; set; }
    public virtual Usr Usr { get; set; }
}

我目前有一个显示表/列表中信息的视图: StartDateTimeEndDateTimeUsrIDProjectID

我想为由StartDateTimeEndDateTime之间的差异代表的TotalHrs添加一列。

为了得到差异,我已经阅读了许多文章,告诉我在某些地方使用时间跨度:

Timspan diff = StartDateTime - EndDateTime;

我不明白的是插入此代码的位置。我假设它在控制器中,但我不明白如何。 我的索引方法如下所示:

public ActionResult Index()
    {
        var hours = db.Hours
            .Include(c => c.Usr)
            .Include(p => p.Project);

                   return View(hours.ToList());
    }

任何指示赞赏!

1 个答案:

答案 0 :(得分:0)

我会反对将这样的计算存储在数据库中,当您可以在客户端轻松地执行此操作时,因为您拥有所有必要的信息。

添加新属性并仅指定get accesor:

public class Hour
{
   // ...
   [NotMapped]
   public TimeSpan TotalHrs
   {
       get
       {
           return this.StartDateTime - this.EndDatetime;
       }
   }
   // ...
}

然后你可以像访问视图,控制器或任何消耗它的类中的任何其他属性一样访问它。

TimeSpan val = hour.TotalHrs;