ASP.NET C# 报价结束倒计时 - Razor View

ASP.NET C# Countdown to end of offer - Razor View

我想在我的 Web 应用程序上有一个类似于“计时器”的东西来结束我的工作订单。如果我添加新工作,一切看起来都不错,例如: DateOfWorkCompletion 是明天,然后工作列表显示传达“在@TimeToEnd day 结束报价”,但如果明天到来,我刷新页面文本仍然相同。为什么?我该怎么办?

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");