Faran Saleem Ответов: 5

Рассчитать старение в ASP.NET с даты подачи заявки


Привет,

Я разрабатываю проект, и для этого мне нужно рассчитать "старение". Старение будет отображаться на другой странице и должно увеличиваться с каждым днем.
Старение будет рассчитываться как (дата подачи формы-сегодняшняя дата).И когда форма отправлена, старение также сохраняется в базе данных SQL.
То, что я сделал до сих пор, заключается в том, что в событии нажатия кнопки отправки я сохранил дату отправки формы в переменной "сейчас". И чтобы вычислить возраст, я вычел из него сегодняшнюю дату.
Ниже приведен мой код
string Ageing = (DateTime.Today.Subtract(Convert.ToDateTime(now)).TotalDays).ToString();


Но проблема в том, что она не увеличивается с каждым днем. Например, если пользователь отправляет дело сегодня i-e (5-Oct-2016), и первоначально старение должно быть 0, потому что форма даты отправлена и текущая дата одинакова, поэтому после вычитания их оно должно быть 0. Но когда пользователь приходит завтра i-e (6-Oct-2016) и проверяет старение, оно должно быть 1 и должно автоматически увеличиваться с каждым днем.
Пожалуйста, помогите, ваша помощь будет высоко оценена.

Что я уже пробовал:

Я пробовал использовать вышеупомянутый код, но всякий раз, когда пользователь отправляет форму. Он сохраняет старение как 0,и оно никогда не увеличивается.
Я хочу, чтобы она увеличивалась с каждым днем.
Например, если дело было подано 2 октября 2016 года, а сегодня 5 октября 2016 года, то оно должно показать старение как 3. (так как (5 октября 2016 года) - (2 октября 2016 года) = 3)

[no name]

Мне действительно трудно представить, что вы делаете, так как мы не видим кода, но на самом деле это звучит так, как будто при отправке формы вы устанавливаете переменную "сейчас" на текущую дату, а затем вычитаете ее из текущей даты....? И ожидал чего-то другого, кроме 0. Это примерно так?

Faran Saleem

Нет, думаю, я не совсем правильно объяснил.
То, что я пытаюсь сделать, - это рассчитать старение на основе даты, когда форма была отправлена, минус текущая дата.
Теперь предположим, что форма была отправлена 2 октября 2016 года, поэтому, когда пользователь отправляет форму 2 октября 2016 года, он должен рассматривать старение как 0, потому что дата отправки формы и текущая дата совпадают, поэтому результат равен 0.
Но когда пользователь посещает страницу на следующий день, то есть 3 октября 2016 года, и видит отправленные формы, то старение должно быть 1, потому что форма была отправлена 2 октября 2016 года, а пользователь видит форму 3 октября 2016 года, так что разница составляет 1 день, а старение в этом случае должно быть 1. И точно так же, когда пользователь просматривает форму 4 октября 2016 года, старение должно быть 2, а также для 5 октября 2016 года старение должно быть 3, потому что форма была отправлена 2 октября 2016 года, а текущая дата-5 октября 2016 года, поэтому он должен рассчитать разницу между этими двумя датами.
Я надеюсь, что я очистил ваше замешательство, если есть еще какие-либо вопросы, пожалуйста, спросите

[no name]

Да я понимаю, что. Что вы хотите делать и что вы являются делать-это две разные вещи. Где вы храните эту дату подачи, чтобы вы могли получить ее позже,чтобы сделать свой расчет старения?

Faran Saleem

Я храню его в базе данных SQL.

[no name]

Что ж, тогда вам будет довольно легко отладить свой код и выяснить, где он идет не так. Мы не сможем сказать вам ничего из одной строки кода, почему ваш код ведет себя не так, как вы ожидаете.

Faran Saleem

Я понял, почему он ведет себя не так, как должен, причина в том, что старение на основе текущей даты и даты отправки формы вычисляется по событию отправки кнопки. Таким образом, всякий раз, когда пользователь нажимает кнопку отправки, старение вычисляется как 0, потому что в этот момент текущая дата и дата отправки формы совпадают. Но он никогда не будет увеличиваться, пользователь будет видеть старение как 0, даже если он посетит страницу через 10 дней, так как старение вычисляется только при нажатии кнопки Отправить.
Я не могу создать логику, в которой пользователь отправляет форму, и старение будет увеличиваться с каждым днем.
Вот почему мне нужна помощь.

[no name]

Окей.... Я не уверен, почему это проблема.... Сохраните дату в своей базе данных один раз. Получите дату из базы данных, когда вам нужно рассчитать старение.

[no name]

В вашем описании говорится, что вы сохраняете текущую дату в своей базе данных каждый раз, когда форма отправляется. Если это правда, то есть ваша проблема.

Faran Saleem

Да, именно это и происходит.. как я могу решить эту проблему? не могли бы вы проводить меня?

[no name]

Сохраните дату в своей базе данных один раз. Получите дату из базы данных, когда вам нужно рассчитать старение.

5 Ответов

Рейтинг:
2

Maciej Los

Ну, в данный момент мы знаем только это Ageing поле не увеличивается, но мы не знаем, что не так с вашим решением. И мы ничего не знаем о методе, используемом для увеличения этого поля!

Итак, я бы предложил начать с чтения статьи, представленной в решении 1 OriginalGriff[^].

Если вы хотите рассчитать разницу в днях между двумя датами, вы можете использовать что-то вроде этого:

DateTime startDate = new DateTime(2016,10,2);
DateTime endDate = new DateTime (2016,10,5);

var daydiff = (endDate-startDate).TotalDays;
//returns: 3


Но... если вы хотите вычислить его на SQL Server, вы должны использовать Функция DateDiff[^]:

SELECT DATEDIFF(DD, '2016-10-02', '2016-10-05') AS Ageing
--returns: 3


Удачи!


Faran Saleem

Именно это я и говорю.. я могу вычислить разницу между двумя датами, но я не в состоянии создать логику того, как я могу держать поле Agein увеличивающимся с каждым днем.
Вот тут-то мне и нужна помощь. Как только пользователь отправит форму, поле agein будет равно 0 в первый день, но оно должно автоматически увеличиться до 1 на следующий день, а затем до 2 и так далее

Maciej Los

Неправильный подход! Вам не нужно хранить "возраст". Все, что вам нужно, это сохранить начальную дату, потому что вы всегда можете рассчитать "возраст" от этой даты до сегодняшнего дня.

Maciej Los

Неправильный подход! Вы должны хранить только дату, потому что вы можете рассчитать возраст от этой даты до сегодняшнего дня.

Maciej Los

Неправильный подход! Вы должны хранить только дату, потому что вы можете рассчитать возраст от этой даты до сегодняшнего дня.

Maciej Los

Неправильный подход! Вам не нужно хранить "возраст" в своей базе данных. Вы должны рассчитывать его каждый день.

Рейтинг:
2

Faran Saleem

Спасибо вам всем за помощь. Я действительно ценю это. Огромное спасибо.

Я решил эту проблему с помощью хранимой процедуры SQL, откуда я вызывал свою таблицу.
Я создал функцию dateDiff, вычел текущую дату из даты отправки и использовал псевдоним. Теперь он отлично вычисляет старение.

Еще раз большое всем спасибо. Ваша помощь много значит.. :)


Рейтинг:
1

Maciej Los

5ед!

Рейтинг:
1

koklimabc

Простой синтаксический анализ из строки в Datetime;

DateTime TotalDays = DateTime.ParseExact(sample.text,"dd/MM/yyyy",System.Globalization.CultureInfo.InvariantCulture);
String Ageing = (DateTime.Now.Subtract((DateTime)TotalDays).Days).ToString();


Рейтинг:
0

Delvadiya Dipak

Вы также можете найти возраст, используя приведенный ниже метод расширения.
Просто передайте DateOfBirth в качестве аргумента.
Есть много альтернатив для достижения результата.

public static int GetAge(DateTime birthDate)
{
    DateTime n = DateTime.Now; // To avoid a race condition around midnight
    int age = n.Year - birthDate.Year;

    if (n.Month < birthDate.Month 
        || 
        (n.Month == birthDate.Month && n.Day < birthDate.Day)
       )
        age--;

    return age;
}