给定日期之间的时间间隔倒计时
本文关键字:倒计时 时间 日期 之间 | 更新日期: 2023-09-27 18:10:47
我将计算两个给定日期之间的TimeSpan
,倒数到0天。我有以下代码:
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,…),等)
如何在给定日期之间倒数。
您的函数永远不会返回任何其他31,因为您正在计算相对于到期日期剩余一个月的天数(即函数总是计算02/09/215
和02/08/2015
之间的天数,因此总是返回一个常量值)。
假设您的mExpiryDate
被持久化并且不改变,这就是我将如何计算剩余的天数(相对于当前日期):
TimeSpan ts = mExpiryDate.Subtract(DateTime.Now);
return ts.Days;
在不知道表单逻辑的情况下,我想问题是到期日期是否存在。
如果存在,检索它;如果没有,从今天开始创建,并添加一个月。
然后计算距离过期天数
它将是这样的(独立代码,调整到您的应用程序):// 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。
我想你漏掉了一个参数。这是你需要的吗?
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 这是给定日期之间倒计时的解决方案。
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 0 31 24 8 9 0 0 0 .....
效果很好!
public TimeSpan ElapsedTimeFormatted
{
get
{
if (FinishedOn != null &&
StartedAt != null)
{
TimeSpan durationCount = new TimeSpan();
int hours = 0;
int minutes = 0;
int seconds = 0;
var times = Segments.Select(c => c.ElapsedTimeFormatted).ToList();
foreach (var time in times)
{
TimeSpan timeParse = TimeSpan.Parse(time);
hours = hours + (int)timeParse.Hours;
minutes = minutes + (int)timeParse.Minutes;
seconds = seconds + (int)timeParse.Seconds;
durationCount = new TimeSpan(hours, minutes, seconds);
}
return durationCount;
}
return new TimeSpan();
}
}