如何在 ASP.NET Core 6 中获取上一周/下一周的编号和年份

问题描述 投票:0回答:1

我在 UI 中有基于本周的导航,单击左/右箭头我正在调用 API 并返回带有上一周/年份编号和下周/年份编号的数据,但现在我需要在 ASP 中处理它。 NET Core 6。所以使用 PHP 和 API 工作得很好。下面给出了 PHP 代码以及请求和输出。

以下 PHP 代码按预期工作。但我在 APS.NET Core 6 中需要相同的输出。

$prev_week = date ("W", strtotime ($year. 'W' . $week . ' -1 week'));
$prev_year = date ("o", strtotime ($year. 'W' . $week . ' -1 week'));
$next_week = date ("W", strtotime ($year. 'W' . $week . ' +1 week'));
$next_year = date ("o", strtotime ($year. 'W' . $week . ' +1 week'));

如果我的周为 52,年份为 2023,那么此代码的输出将是:

prev_week 51
prev_year 2023
next_week 01
next_year 2024

现在我尝试将上述代码转换为 ASP.NET Core 6,但我无法获得 PHP 的确切输出。这是我到目前为止所做的。

由于我已经有了年份和周数,所以我只想获取上一周和下一周,如果是年底或一年的第一周,那么前一周和一年应该说周为 1,年份应该是前一年。

using System;

int prev_week = DateTime.ParseExact($"{year}-W{week}", "yyyy-'W'w", null).AddWeeks(-1).Week;
int prev_year = DateTime.ParseExact($"{year}-W{week}", "yyyy-'W'w", null).AddWeeks(-1).Year;
int next_week = DateTime.ParseExact($"{year}-W{week}", "yyyy-'W'w", null).AddWeeks(1).Week;
int next_year = DateTime.ParseExact($"{year}-W{week}", "yyyy-'W'w", null).AddWeeks(1).Year;

这段代码没有给我相同的结果。

我想获得与上面所示的相同的输出,就像在 ASP.NET Core 6 Web API 中使用 viewmodel 从 php 获取的一样。

asp.net asp.net-core date datetime week-number
1个回答
0
投票

我建议你可以使用nodatime包并尝试使用以下代码:

您可以使用下面的 nuget package 命令进行安装。

安装包NodaTime

您可以创建一个模型类:

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

然后你可以创建一个计算方法:

    public static WeekYearInfo CalculatePrevNextWeekYear(int year, int week)
   {
       LocalDate inputDate = LocalDate.FromWeekYearWeekAndDay(year, week, IsoDayOfWeek.Monday);
       LocalDate prevWeekDate = inputDate.PlusWeeks(-1);
       LocalDate nextWeekDate = inputDate.PlusWeeks(1);
       IWeekYearRule rule = WeekYearRules.Iso;

       return new WeekYearInfo
       {
           PrevWeek = rule.GetWeekOfWeekYear(prevWeekDate),
           PrevYear = rule.GetWeekYear(prevWeekDate),
           NextWeek = rule.GetWeekOfWeekYear(nextWeekDate),
           NextYear = rule.GetWeekYear(nextWeekDate)
       };
   }

最后就可以在控制器内部调用了:

    public IActionResult Privacy()
    {
        int year = 2023;
        int week = 52;
        WeekYearInfo result = CalculatePrevNextWeekYear(year, week);

        return View(result);
    }

结果:

© www.soinside.com 2019 - 2024. All rights reserved.