TimeSpan在给定日期之间倒计时

时间:2015-08-31 23:22:17

标签: c# visual-studio-lightswitch lightswitch-2012

我想在两个给定日期之间计算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,..,24等)

如何在给定日期之间倒计时。

5 个答案:

答案 0 :(得分:0)

您的函数永远不会返回任何其他31,因为您计算相对于到期日期恰好一个月的剩余天数(即函数始终计算02/09/215和{{之间的天数1}},因此总是返回一个常量值。)

假设您的02/08/2015持续存在但未发生变化,我就会计算剩余的天数(相对于当前日期):

mExpiryDate

答案 1 :(得分:0)

我认为你错过了一个参数。这就是你需要的:

<ContextMenu x:Key="MyContextMenu" DataContext="{Binding Source={StaticResource MyBindingProxy}, Path=Data}" ItemsSource="{Binding ContextMenuMap}" DisplayMemberPath="Header">
    <ContextMenu.Resources>
        <Style TargetType="{x:Type MenuItem}">
            <Setter Property="Command" Value="{Binding Command}" />
        </Style>
    </ContextMenu.Resources>
</ContextMenu>

https://dotnetfiddle.net/9mDPx2

答案 2 :(得分: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。

答案 3 :(得分: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 0 31 24 8 9 0 0 0 .....

答案 4 :(得分:-1)

这很好用!

    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();
        }
    }