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
相关产品推荐
相关产品推荐

