每月结算周期的最佳模式

aro*_*ron 6 c# datetime billing

我为我的新计费系统编写了一些代码.目的是在每个月的同一天向客户收费.(不是本月的第1天或最后一天)

static bool NeedToBill(DateTime planLastBilled, DateTime cycleDate)
    {
        // is today the same date as the cycleDate AND is was the planLastBilled not the same day as today?
        if (DateTime.UtcNow.Day.Equals(cycleDate.Day) && !DateTime.UtcNow.Day.Equals(planLastBilled))
            return true;
        else
            return false;
    } 
Run Code Online (Sandbox Code Playgroud)

两个陷阱是:

  1. 如果他的cycleDate.Day是31,而当前月只有29天
  2. cycleDate是2012年2月29日 - 他只会在闰年上收费

这里有一个共同的最佳做法吗?

所以看起来有很多事要检查

  1. 这个帐户本月已经开帐单吗?
  2. 周期日是否存在于当月
  3. 循环日是大于或等于当前日期(如果交易在前一天失败,这是理想的)

谢谢!

m.e*_*son 7

只允许选择1 - 28之间的结算日.根据我的经验,这是大多数信用卡/贷款公司在给出选择时如何处理它.


aro*_*ron 0

好吧,我相信我已经完全结束了了。\n这很简单并且涵盖了所有内容:

\n\n
bool NeedToBill = ((DateTime.UTCNow \xe2\x80\x93 LastBillDate) >= 30 Days)\n
Run Code Online (Sandbox Code Playgroud)\n\n

它不一定会在同一天计费,但已经足够接近了。\n如果交易被拒绝一天,或者计划任务在下次运行时 1 天没有运行,它会选择它,这也增加了灵活性向上。

\n

  • 你确定这有效吗?在我看来,您每年都会将账单日期更改约 5 天,最终向您的客户收取过多费用(每 6 年额外收取 1 张账单)。如果您的公司有足够的订户,这听起来像是集体诉讼的好案例...... (4认同)