我在 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 获取的一样。
我建议你可以使用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);
}
结果: