[英]ASP.NET C# Countdown to end of offer - Razor View
我想在我的 web 应用程序上使用类似于“计时器”的东西来结束我的工单。 如果我添加新工作,一切看起来都很好,例如:DateOfWorkCompletion 是明天,那么工作列表会显示“@TimeToEnd 日期的报价结束”,但如果明天来了,我刷新页面文本仍然是一样的。 为什么? 我应该怎么办?
var TimeToEnd = Math.Floor(decimal.Parse((DateTime.Today - work.DateOfWorkCompletion).Value.ToString("dd")));
<h2>
@Html.ActionLink(work.Name, "Details", new { work.WorkId }, new { style = "text-decoration: none; color:black;" })
<span class="timeAlert">
-
@if (TimeToEnd > 1)
{
<span>end of offer in @TimeToEnd days/span>
}
else if (TimeToEnd == 0)
{
<span class="text-danger">the offer ends today</span>
}
else if (TimeToEnd == 1)
{
<span class="text-danger">end of offer in @TimeToEnd day</span>
else
{
<span class="text-danger">offer has expired</span>
}
如果work.DateOfWorkCompletion
在未来,那么执行DateTime.Today - work.DateOfWorkCompletion
将导致负值。然后您会陷入混乱,即在负时间跨度中的 ToStringing 天数会导致正值
用string
抛弃所有的来回:一个日期减去另一个日期会产生一个 TimeSpan,并且 TimeSpan 具有您可以检查的属性,这些属性可以显示有关两个日期之间的时间段长度的信息。
就个人而言,我也建议使用定时日期时间,例如,如果报价在明天下午 6 点结束,而今天是下午 3 点,那么距离报价到期还有 1 天 3 小时:
var tsTilExpiry = someFutureDate - DateTime.Now; //results in a TimeSpan
Console.WriteLine("Offer ends in: " + tsTilExpiry);
Console.WriteLine($"Offer ends in {tsTilExpiry.TotalMinutes} minutes");
Console.WriteLine($"Offer ends in {tsTilExpiry.Days} days, {tsTilExpiry.Hours} hours");
if(tsTilExpiry.TotalDays < 1)
Console.WriteLine("Hurry! Offer finishes in less than a day");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.