递减日期月份转换

分享于2022年07月17日 c# calculation datetime decrement 问答
【问题标题】:递减日期月份转换(Decrement date month transition)
【发布时间】:2022-01-26 00:44:19
【问题描述】:

我有一个函数可以在每次调用时将日期递减一天。

private IEnumerable EachDay(DateTime from, DateTime thru)
{
    for (var day = thru.Date; day.Date >= from.Date; day = day.Subtract(TimeSpan.FromDays(1)))//day.AddDays(-1))
    {
        yield return day;
    }
}

在我到达上个月之前似乎工作正常。如果有人有解决方案?

  • 当您到达上个月时会发生什么?你能举例说明你是如何使用它的吗?
  • 描述它如何不符合您的期望
  • 到底是什么问题?还有为什么不只是 day = day.AddDays(-1)

【解决方案1】:

我会使用这样的东西

private IEnumerable EachDay(DateTime from, DateTime thru)
{
    var days=(thru.Date - from.Date).Days;
    if (days <= 0)  yield return DateTime.MinValue;
    else for (var day = days; day >= 0; day-=1)
    yield return from.Date.AddDays(day);
}

测试

var thru =new DateTime(day: 01,month:12, year:2021); 
var from= thru.AddDays(-10);
EachDay(from,thru).Dump();

结果

    2021-12-01
    2021-11-30
    2021-11-29
    2021-11-28
    2021-11-27
    2021-11-26
    2021-11-25
    2021-11-24
    2021-11-23
    2021-11-22
    2021-11-21

  • 感谢您的提议,但问题没有解决。例如,当我给出 01/12/2021 时,响应是 01/00/2021 而不是 30/11/2021。
  • @sviardot 请给出 2 个日期,from 和 to,当它不起作用时,另一个日期必须是无效的