给定日期之间的时间间隔倒计时

本文关键字:倒计时 时间 日期 之间 | 更新日期: 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/21502/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();
        }
    }