【问题标题】:Calculating last week of the year in PHP to skip to next year在 PHP 中计算一年中的最后一周以跳到明年
【发布时间】:2020-10-07 12:53:48
【问题描述】:

我正在创建一个基于周的时间表。现在我发现 2020 年是奇数年,就像第 53 周一样。

现在我想从一年的最后一周转到第一周。 我尝试了一些,但无法正常工作(从第 53 周到第 1 周)

<header>
  <?
  $week_start = new DateTime();
  $week_start->setISODate($year,$weeknr);
  $weeknr = $week_start->format('W');

  $week_start2 = new DateTime();
  $week_start2->setISODate($year,$weeknr);
  $yearnum = $week_start2->format('Y');

  $weekmin = $weeknr - 1;


  $date = strtotime("31 December $year");
  $last_week = gmdate("W", $date);

  if($last_week == 53 && $weeknr == 53){
    $weekplus = $weeknr - 51;
    $yearnum++;
  }else{
    $weekplus = $weeknr + 1;
  }

  echo'<a href="./agenda_user?wknr='.$weekmin.'">????</a>';?>
  <span>Week <?

  echo $weeknr.' ';


  echo $yearnum;


  ?></span>
  <? echo '<a href="./agenda_user?wknr='.$weekplus.'">????</a>';?>
</header>

我找到了这个答案 https://stackoverflow.com/a/3319413/11608455 但这并不能完全回答我的问题

【问题讨论】:

    标签: php time


    【解决方案1】:

    改用:index.php?date=2020-09-01 (YYYY-MM-DD)?这样您就可以更轻松地操作日期。

    对于您的“下”周数:

    $date = new DateTime('2020-10-07');
    $date->add(new DateInterval('P7D'));
    echo $date->format('W');
    

    对于最小周数:

    $date = new DateTime('2000-10-07');
    $date->sub(new DateInterval('P7D'));
    echo $date->format('W');
    

    使用您希望显示的任何内容更改格式。

    对于下一个和以前的链接,我会使用整个日期。 index.php?date=2020-10-07

    这样可以更轻松地操作日期,并且不会与第 53 周和第 1 周混淆。您想在第 53 周或第 1 周显示这完全取决于您。

    【讨论】:

    • 我按照你说的做了,而不是使用周,我做了 $YandW = $week_start->format('W/Y');并将其放入链接中并将 $weeknr 定义为 $YandW 的结果。但这仍然会导致问题出现在 2021 年第 1 周之前。您将如何解决这个问题?
    • 该问题的问题在于您定义问题的方式; “这周不是 2021 年的第 1 周吗?”这是缺少的部分在哪里?您是否需要在某处显示 2021 年第 1 周?月视图?年景?周视图?因为如果它只是几天的问题,你也可能需要这些日子,12 月 31 日是第 53 周,但 2021 年 1 月 1 日是第 1 周。所以这完全取决于哪一天是开始的观点?你选择一月还是十二月?选哪一天?好吧,这是一个选择问题,只要 1 月 1 日是第 1 周。
    • 想通了!使用时间时,第 53 周自动分配周数,我只需将其转换为之后的周数。 $dto = new DateTime(); $dto-&gt;setISODate($year, $weeknr); $time_calc = $dto-&gt;format('Y-m-d'); $time_plus = strtotime('+1 week', strtotime($time_calc)); $time_plus = date("Y-W", $time_plus);
    • 嗯,这是一个答案,但我会使用完整的日期来确定日期属于哪一周。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    • 1970-01-01
    • 2019-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多