2015-08-31 3 views
0

Я бы вычислил между двумя датами TimeSpan, считая до 0 дней. У меня есть следующий код:Обратный отсчет TimeSpan между датами

partial void mExpiration_Compute(ref string result) 
    { 

     DateTime a = mExpiryDate.AddMonths(-1); 
     DateTime b = mExpiryDate; 

     TimeSpan ts = b.Subtract(a); 

     // Difference in days. 
     int c = ts.Days; 

     result = Convert.ToString(c); 

    } 

Если TimeSpan в настоящее время 31, то я хотел бы восстанавливающее время баланса. Пример: «У вас есть 24 дня до истечения срока действия». Примечание: Уменьшение баланса (31, 30, .., 24 и т. Д.)

Как я могу рассчитывать между заданными датами.

+0

Это дает мне правильные 31 дней в визуально студии 2015 .... что стоимость mExpiryDate для меня я установил для DateTime.Now –

+0

Значение mExpiryDate - 02/09/215 минус mExpiryDate.AddMonths (-1) от 02/08/2015 – Xdrone

+0

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

ответ

0

Ваша функция никогда не возвращает ничего другого 31, потому что вы подсчитывают дни оставшиеся ровно один месяц относительно даты истечения срока (т.е. функция всегда вычисляет дни между 02/09/215 и 02/08/2015, таким образом, всегда возвращает значение константы).

Предполагая, что ваш mExpiryDate это сохранялось и не меняется, это, как я бы вычислить оставшееся число дней (по отношению к текущей дате):

TimeSpan ts = mExpiryDate.Subtract(DateTime.Now); 
return ts.Days; 
+0

Значение mExpiryDate.AddMonths (-1) должно быть указано при срабатывании уведомления («У вас есть 24 дня до даты истечения срока действия). DateTime.Now не является правильным временем между периодом истечения срока. – Xdrone

+0

Итак, похоже, что вам нужна дополнительная логика только для того, чтобы установить «уведомление», если дни меньше нуля. Повторить, если истечение срока действия НЕ ИЗМЕНЯЕТСЯ, тогда ваша функция ВСЕГДА вернется 31. –

0

Я думаю, что вам не хватает параметра. Является ли это то, что вам нужно:

static DateTime mExpiryDate = DateTime.Parse("09/29/2015"); 
public static void Main() 
{ 
    var result = string.Empty; 
    var noticeDate = DateTime.Parse("09/05/2015"); 
    mExpiration_Compute(ref result, noticeDate); 
    Console.WriteLine(result); 
} 

public static void mExpiration_Compute(ref string result, DateTime noticeDate) 
{ 
    DateTime a = noticeDate; 
    DateTime b = mExpiryDate; 
    TimeSpan ts = b.Subtract(a); 
    result = string.Format("You have {0} days to expiry date.", ts.Days); 
} 

https://dotnetfiddle.net/9mDPx2

+0

Да, но результат не является условием цикла. Он отражает единую дату – Xdrone

+0

Итак, у вас есть одна дата mExpiryDate, и вам нужно отсчитывать до другой даты. Я не вижу другую дату в вашем коде. Сейчас и дата a, и дата b основаны на mExpiryDate, и поэтому ваша разница всегда будет 31. Хочешь ли вы отсчитывать от mExpiryDate до текущей даты? – lastmannorth

0

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

Если он существует, извлеките его; если нет, создайте его на сегодняшний день и добавьте один месяц.

Затем рассчитать дни до истечения срока.

Он будет идти, как этот (автономный код, настроить для вашего приложения):

// Choose either setting 1. or 2. for mExpiryDate. 
// Here setting 1. is active: 

//  1. Simulate expiry date already set on August 17th. 
DateTime mExpiryDate = new DateTime(2015, 9, 17); 

//  2. Expiry date not set. 
//DateTime mExpiryDate = DateTime.Today.AddMonths(1); 

TimeSpan ts = mExpiryDate.Subtract(DateTime.Today); 

// Difference in days. 
int c = ts.Days; 

string result = Convert.ToString(c); 

Это будет в этот день, 2015-09-01, возвращение 16.

0

Этот раствор для обратного отсчета между заданными датами.

partial void mExpiration_Compute(ref string result) 
    { 

     DateTime expStart = mExpiryDate.AddMonths(-1); 
     DateTime expDate = mExpiryDate; 
     DateTime currentDate = DateTime.Now; 

     // Difference in days, hours, and minutes. 
     TimeSpan expSpanGivenDates = expDate.Subtract(expStart); 
     TimeSpan expSpanDateNow = expDate.Subtract(currentDate); 

     // Difference in days 
     int numGivenDays = expSpanGivenDates.Days; 
     int numNowDays = expSpanDateNow.Days; 
     int calculateDays = numGivenDays - (numGivenDays - numNowDays); 

     int days = 0; 

     if (calculateDays >= 0 && calculateDays < 31) 
     { 
      days = calculateDays; 
     } 

     result = Convert.ToString(days); 

    } 

Он вернет количество дней, оставшихся между двумя заданными датами. Это будет 0 до и после истечения срока действия.

Выход будет: 0 31 0 24 8 9 0 0 0 .....

Смежные вопросы