C# 计算到下一个指定日期的剩余天数

C# 计算到下一个指定日期的剩余天数,c#,datetime,C#,Datetime,在需要计算下一个“账单日期”的情况下,如果知道下一个账单日期(第2天、第25天等),您如何计算下一次账单付款的剩余天数 说明: int billingDay = 4; //The day the bill gets generated every month DateTime today = DateTime.Today; //Today's date 汤姆的账单在每个月的4号生成 计算下一张账单的剩余天数的最佳方法/逻辑是什么?例如,如果今天是本月28日,结果将是剩下6天 我们所知道的: i

在需要计算下一个“账单日期”的情况下,如果知道下一个账单日期(第2天、第25天等),您如何计算下一次账单付款的剩余天数

说明:

int billingDay = 4; //The day the bill gets generated every month
DateTime today = DateTime.Today; //Today's date
汤姆的账单在每个月的4号生成

计算下一张账单的剩余天数的最佳方法/逻辑是什么?例如,如果今天是本月28日,结果将是剩下6天

我们所知道的:

int billingDay = 4; //The day the bill gets generated every month
DateTime today = DateTime.Today; //Today's date
票据生成日期已知

今天的日期是已知的

到目前为止我所做的:

int billingDay = 4; //The day the bill gets generated every month
DateTime today = DateTime.Today; //Today's date
我如何继续计算下一个计费日期

附言:如果这听起来很蹩脚的话,很抱歉,我就是想不通:)

怎么样:

int billingDay = 4;
DateTime today = DateTime.UtcNow;
DateTime billing = today.Day >= billingDay
                   ? new DateTime(today.AddMonths(1).Year, today.AddMonths(1).Month, billingDay)
                   : new DateTime(today.Year, today.Month, billingDay);
TimeSpan left = billing - today;

此链接可能会帮助您:

您可以这样做:

        int daysUntilBill = 0;
        int billingDay = 4;
        DateTime today = DateTime.Today;
        if (billingDay > today.Day) {
            daysUntilBill = billingDay - today.Day;
        } else {
            int daysLeftInMonth = DateTime.DaysInMonth(today.Year, today.Month) - today.Day;
            daysUntilBill = billingDay + daysLeftInMonth;
        }
或者更简洁一点

        int daysUntilBill = (billingDay >= today.Day) 
            ? billingDay - today.Day 
            : billingDay + DateTime.DaysInMonth(today.Year, today.Month) - today.Day;
这也很好地处理了年终,因为它不会试图结束

我认为这是可行的:

private int GetNumDaysToNextBillingDate(int billingDayOfMonth)
{
    DateTime today = DateTime.Today;

    if (today.Day <= billingDayOfMonth)
    {
        return (new DateTime(today.Year, today.Month, billingDayOfMonth) - today).Days;
    }
    else
    {
        var oneMonthFromToday = today.AddMonths(1);

        var billingDateNextMonth = 
            new DateTime(oneMonthFromToday.Year, 
            oneMonthFromToday.Month, billingDayOfMonth);

        return (billingDateNextMonth - today).Days;
    }
}
private int GetNumDaysToNextBillingDate(int billingDayOfMonth)
{
DateTime today=DateTime.today;

如果(today.Day首先,您需要确定当前日期是否在计费日当天或之前,以及是否只是减去当月的当前日期。否则,您必须确定下一个月的下一个计费日期

public int DaysToNextBill(int billingDay)
{
    var today = DateTime.Today;

    if(today.Day <= billingDay)
        return billingDay - today.Day;

    var nextMonth = today.AddMonth(1);
    var nextBillingDate = new DateTime(nextMonth.Year, nextMonth.Month, billingDay)
    return (nextBillingDate - today).Days;
}
public int DaysToNextBill(int billingDay)
{
var today=DateTime.today;

如果(today.Day使用循环,但由于考虑了月份和年份的变化,因此不太容易出错:

    int DaysUntilBilling(int billingDay, DateTime referenceDate)
    {
        int count = 0;
        while (referenceDate.AddDays(count).Day != billingDay)
        {
            count++;               
        };
        return count;
    }
如果您总是使用今天的日期,当然不需要将DateTime作为参数传入,但这有助于测试对于不同的输入,您可以获得所需的输出:

int billingDay = 4;
DaysUntilBilling(billingDay, DateTime.Now); //26 (today is 9th Aug 2016)
DaysUntilBilling(billingDay, new DateTime(2016, 09, 03); //1
DaysUntilBilling(billingDay, new DateTime(2016, 09, 04); //0
DaysUntilBilling(billingDay, new DateTime(2016, 08, 05); //30
DaysUntilBilling(billingDay, new DateTime(2016, 12, 19); //16

你可能会发现这篇文章非常有用:它将在第一点上帮助你。只需获得当月的实际天数。然后
今天的日期-实际天数
并添加计费日期。哇,我喜欢所有的回复。感谢你抽出时间,大家:)如果今天是一个月的第三天怎么办?运行您的代码,计算
DateTime today=new DateTime(2016,8,3);
-如果计费日是第四天,那么您应该得到1,但您的代码结果是32。@trailmax哦,我明白您的意思了!将修复此问题it@trailmax更新了我的答案这是潮湿的:
newdatetime(今天。AddMonths(1)。Year,今天。AddMonths(1).Month,billingDay)
有时一行程序不是最好的方法。当使用
DaysInMonth
时,你不应该使用硬编码的年份。@D.Stewart不应该。如果你使用
DateTime today=new DateTime(2016,8,3)运行代码
您可以得到28英镑。但是结账日是8月4日——离这一天只有一天了。谢谢您抽出时间(各位:)谢谢你抽出时间兄弟:)我个人更喜欢这一个,它似乎能处理观众指出的所有问题。谢谢兄弟:)也谢谢大家的解决方案!不客气!虽然它比其他一些答案多了几行,但我认为它也更容易理解哪个是重要的。它读起来像一本书。单行语句很快就会变得混乱(特别是当它们换行时!)。