Я хочу, чтобы в моем веб-приложении было что-то вроде «таймера» для завершения моего рабочего задания. Если я добавляю новую работу, все выглядит хорошо, например: 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>
                }
0
dzyzus 27 Ноя 2021 в 16:02
Вам нужно сохранить значение в переменной приложения или записать в какой-либо файл или базу данных и получать из требуемого источника всякий раз, когда вам нужно получить его значение.
 – 
vivek nuna
27 Ноя 2021 в 16:13

1 ответ

Лучший ответ

Если work.DateOfWorkCompletion находится в будущем, то выполнение DateTime.Today - work.DateOfWorkCompletion приведет к отрицательному значению .. Затем вы запутаетесь, что ToStringing дней в отрицательном временном интервале дает положительное значение

Откажитесь от всего этого с помощью string: одна дата минус другая дата дает TimeSpan, а TimeSpan имеет свойства, которые вы можете проверить, которые раскрывают информацию о продолжительности периода времени между двумя датами.

Лично я бы также рекомендовал использовать синхронизированные даты, если, например, предложение заканчивается в 18:00 завтра, а сегодня 15:00, затем до истечения срока действия предложения остается 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");
1
Caius Jard 27 Ноя 2021 в 16:28
Спасибо, это работает :)
 – 
dzyzus
27 Ноя 2021 в 17:05