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

如何在ASP.NET Core 6中获取上/下周的周数及年份

解决ASP.NET Core 6中ISO周导航的问题

问题分析

原PHP代码采用ISO 8601周规则(每周以周一为起始,o表示周所属的年份,即包含该周大部分天数的年份),输入2023年第52周时,下周能正确跨到2024年第1周。你写的C#代码存在两个核心问题:

  • DateTime类型没有直接的Week属性,代码无法编译
  • 未遵循ISO 8601周计算规则,导致跨年/跨周的结果不符合预期

正确实现方案

ASP.NET Core 6支持ISOWeek类(.NET Core 3.0+引入),可直接处理ISO标准的周计算,完全匹配PHP逻辑。

1. 定义ViewModel

public class WeekNavigationResult
{
    public int PrevWeek { get; set; }
    public int PrevYear { get; set; }
    public int NextWeek { get; set; }
    public int NextYear { get; set; }
}

2. 周计算核心逻辑

using System;

public static WeekNavigationResult GetWeekNavigation(int year, int week)
{
    // 解析ISO周对应的周一日期(取周内任意一天不影响周计算结果)
    if (!ISOWeek.TryGetDate(year, week, DayOfWeek.Monday, out DateTime currentWeekDate))
    {
        throw new ArgumentException("无效的年份或周数");
    }

    // 计算上一周的ISO周信息
    DateTime prevWeekDate = currentWeekDate.AddDays(-7);
    var prevWeekData = ISOWeek.GetWeekOfYear(prevWeekDate);
    
    // 计算下一周的ISO周信息
    DateTime nextWeekDate = currentWeekDate.AddDays(7);
    var nextWeekData = ISOWeek.GetWeekOfYear(nextWeekDate);

    return new WeekNavigationResult
    {
        PrevWeek = prevWeekData.Week,
        PrevYear = prevWeekData.Year,
        NextWeek = nextWeekData.Week,
        NextYear = nextWeekData.Year
    };
}

3. ASP.NET Core Web API示例

[ApiController]
[Route("api/week-navigation")]
public class WeekNavigationController : ControllerBase
{
    [HttpGet]
    public IActionResult GetNavigation([FromQuery] int year, [FromQuery] int week)
    {
        try
        {
            var result = GetWeekNavigation(year, week);
            return Ok(result);
        }
        catch (ArgumentException ex)
        {
            return BadRequest(ex.Message);
        }
    }
}

测试验证

当请求/api/week-navigation?year=2023&week=52时,返回结果与PHP完全一致:

{
  "prevWeek": 51,
  "prevYear": 2023,
  "nextWeek": 1,
  "nextYear": 2024
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 08:23:30