繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM