C# 计算到下一个指定日期的剩余天数
在需要计算下一个“账单日期”的情况下,如果知道下一个账单日期(第2天、第25天等),您如何计算下一次账单付款的剩余天数 说明: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
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日——离这一天只有一天了。谢谢您抽出时间(各位:)谢谢你抽出时间兄弟:)我个人更喜欢这一个,它似乎能处理观众指出的所有问题。谢谢兄弟:)也谢谢大家的解决方案!不客气!虽然它比其他一些答案多了几行,但我认为它也更容易理解哪个是重要的。它读起来像一本书。单行语句很快就会变得混乱(特别是当它们换行时!)。