Я был немного сбит с толку. Я пытаюсь проверить промежуток между датой блокировки (поле, которое я использую, чтобы знать, нужно ли мне блокировать запись для редактирования) с сегодняшнего дня. Если с момента DateTime.now прошло больше суток, мне нужно, чтобы ViewBag был установлен в true.
Это то, что я пробовал до сих пор.
var lockRequest = from t in _context.Request
where t.Condition == 2
select t;
foreach (var t in lockRequest)
{
if (DateTime.Now.Day - Convert.ToDateTime(t.RequestLockDate).Day > 1 )
{
ViewBag.isLocked = true;
}
else
{
ViewBag.isLocked = false;
}
}
Но это не работает, он всегда возвращается к истине. Есть идеи? Спасибо
Объект Day of DateTime
:
Получает день месяца, представленный этим экземпляром.
то есть
Компонент дня, выраженный в виде значения от 1 до 31.
Таким образом, одно место, где ваш код может дать сбой, — это от одного месяца к другому, когда счетчик сбрасывается.
Вместо этого вы можете вычесть один DateTime
из другого, чтобы получить результирующий TimeSpan
, а затем посмотреть, сколько это времени:
if ((DateTime.Now - Convert.ToDateTime(t.RequestLockDate)).TotalHours > 24) {
ViewBag.isLocked = true;
} else {
ViewBag.isLocked = false;
}
или просто
ViewBag.isLocked = (DateTime.Now - Convert.ToDateTime(t.RequestLockDate)).TotalHours > 24;
Вот как будет проходить проверка:
var currentDate = DateTime.Now;
var newDate = t.RequestLockDate;
var isPreviousDay = (currentDate - newDate).TotalDays >= 1;
Console.WriteLine(isPreviousDay);
Вы пробовали так?
if ((DateTime.Now - Convert.ToDateTime(t.RequestLockDate)) > TimeSpan.FromDays(1))
{
ViewBag.isLocked = true;
}
else
{
ViewBag.isLocked = false;
}
Сравнение свойства Day может дать неправильный результат. Только представьте 31.1.2020 и 1.2.2020.
Я бы предложил сравнить дату и время
var locked = Datetime.Today.AddDays(-1) > t.RequestLockDate
@Pribina Какой бы единицей вы ни хотели. TimeSpan
имеет несколько свойств, позволяющих получать информацию по вашему желанию.
я согласен с ребятами, но он сравнивает это без использования какого-либо свойства прямо с 1 как целое число
Я предлагаю удалить эту часть из ответа. Сохраните объяснение того, почему использование только дней — это плохо, и предлагаемое решение (это лучше, чем решение @JamesThorpe).
Почему
TimeSpan
«не то, что вы ожидаете»? Они хотят знать прошедшее время, для чего они и созданы.