You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor到期日计算器:如何适配不同月份的天数计算?

精准适配月份天数的Blazor到期日计算器解决方案

核心解决思路

直接使用.NET DateTime内置的AddMonths()方法,该方法会自动处理不同月份的天数差异:

  • 若起始日为当月最后一天,加N个月后会自动跳转到目标月的最后一天(比如1月31日加1个月→2月28/29日,3月31日加1个月→4月30日)
  • 若起始日在目标月存在对应日期,则直接返回对应日(比如2月15日加1个月→3月15日)
    完全满足实验室精确到天的需求,无需手动计算每月天数。

修改后的完整可运行代码

@page "/expiry-calculator"
@using System

<h3>到期日计算器</h3>

<div class="form-group">
    <label>起始日期:</label>
    <InputDate @bind-Value="StartDate" class="form-control" />
</div>

<div class="form-group mt-3">
    <label>增加月份数:</label>
    <InputNumber @bind-Value="MonthsToAdd" min="1" class="form-control" />
</div>

<button class="btn btn-primary mt-3" @onclick="CalculateExpiryDate">计算到期日</button>

@if (ExpiryDate.HasValue)
{
    <div class="mt-3 alert alert-success">
        精确到期日: @ExpiryDate.Value.ToString("yyyy-MM-dd")
    </div>
}

@code {
    private DateTime StartDate { get; set; } = DateTime.Today;
    private int MonthsToAdd { get; set; } = 1;
    private DateTime? ExpiryDate { get; set; }

    private void CalculateExpiryDate()
    {
        // 替换原TimeSpan.FromDays(30 * MonthsToAdd),使用AddMonths实现精准计算
        ExpiryDate = StartDate.AddMonths(MonthsToAdd);
    }
}

备选方案(若必须用固定30天计算)

如果业务强制要求按每月30天计算,保留原逻辑即可,但需明确标注计算规则:

// 固定30天/月的计算方式
ExpiryDate = StartDate.AddDays(30 * MonthsToAdd);

但此方式会导致与实际日历不符,比如1月1日加1个月会变成2月1日(实际间隔31天),不符合精确到天的要求,不推荐用于实验室产品场景。

内容的提问来源于stack exchange,提问作者Sahar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 00:05:40