【问题标题】:Get previous week number from php week number从php周数获取前一周数
【发布时间】:2013-01-28 11:53:10
【问题描述】:

我目前需要从传递 php 周数的变量中获取前一周,因此如果是第 13 周,我将获得第 12 周。

我面临的问题是,如果我在第 1 周时从原始数字中减去 1,它将返回第 0 周,除非我创建一个 if 语句,即:

if($week==1)
{
    $prev_week=52;
    $prev_year=$year-1;
}

这是假设 php 从 1 而不是 0 开始计算周数。这似乎有点笨拙,我想可能有更好的方法来利用 PHP 的许多日期和时间函数。

【问题讨论】:

  • 根据使用的表示法,您甚至可能有第 53 周。每个地区的标准不同,因此美国的第 1 周可能是欧洲的第 53 周。一年并不完全有 52 周,因此您可能偶尔需要一个闰周。 ;)
  • 是的,我可以看到这种情况发生。我更愿意按月工作,但我的客户坚持每周开具发票:(
  • 由于周数和年份数存储在数据库中,我可以进行快速数据库查询以检查我认为是否有第 53 周,如果没有将其设置为 52
  • 实际上一年可能有 54 周(2000 年就是一个例子)。

标签: php date time


【解决方案1】:

试试这个:

$currentWeek = date( 'W' );

$today = strtotime( date( 'Y-m-d' ) ) - 7*24*60*60; // last week this day
// change 7 to 30 to see last year's week numer

$lastWeek = date( 'W', $today );

echo $currentWeek . '--' . $lastWeek;

希望这会有所帮助。

更新

$lastWeekNumber = date( 'W', strtotime( 'last week' ) );

【讨论】:

  • 谢谢 - 这适用于从当前周获取前一周,尽管它适用于几周后的“currentWeek”(如果有意义的话)。我会玩的:)
  • 您可以通过编辑第二行来检查....只需减去您想要的天数(以秒为单位),看看是否有效。
  • 最佳答案。周数始终为 7 天,因此您可以从绝对日期中添加或减去周数,然后从中获取周数。让 PHP 为您处理周数,尽管您应该检查您的客户端是否使用相同的编号。 ;-)
【解决方案2】:
$PreviousWeek = date("W",strtotime("-1 week"));

【讨论】:

    【解决方案3】:

    我认为我可能会使问题过于复杂 - 基本上我需要从数据库中获取所选周前几周出现的结果,因此如果一年中有 54 周的可能性,我真正需要做的就是是:-

     if($week==1)
     {
        $year_minsued=$year-1;
        $week_minused=54;
     }
     else
     {
        $week_minused=$week-1;
        $year_minused=$year;
     }
    

    然后我的选择语句可以读取:

    SELECT SUM(post_price), SUM(total_price) FROM
    database_table
    WHERE client_id='$account_no'
    AND
       (year<='$year_minused' AND week<='$week_minused')
    

    我尚未对此进行测试,但认为它应该可以完成这项工作。

    【讨论】:

    • 对不起 - 你让我担心这种方法可能存在缺陷,虽然有点笨拙 - 如果有缺陷我很想知道:)
    【解决方案4】:

    HamZa 和 web-nomad 的回答帮助我更进一步,确保我得到了正确的年份。使用date ('Y') 可能会导致意外行为,因为它可能会发生,根据 ISO-8601(这是在欧洲使用的),第 1 周属于下一年或上一年。而是使用date ('o')。否则,您可能会从第 52 周跳到上一年的第 1 周(因为根据date ('Y'),一周的开始是在上一年。

    $jahr = 2014; // jahr means year
    $kw   = 52;   // kw contains week
    

    使用date ('Y')returns:

    previousWeek: 51-2014
    currentWeek: 52-2014
    nextWeek: 01-2014
    

    使用date ('o')returns:

    previousWeek: 51-2014
    currentWeek: 52-2014
    nextWeek: 01-2015
    

    一起查看所有代码,例如。 G。用于构建前向和后向链接:

    $kwBack['kw'] = date ("W", strtotime ($jahr. 'W' . str_pad ($kw, 2, 0, STR_PAD_LEFT). ' -1 week'));
    $kwBack['jahr'] = date ("o", strtotime ($jahr. 'W' . str_pad ($kw, 2, 0, STR_PAD_LEFT). ' -1 week'));
    
    $kwNext['kw'] = date ("W", strtotime ($jahr. 'W' . str_pad ($kw, 2, 0, STR_PAD_LEFT). ' +1 week'));
    $kwNext['jahr'] = date ("o", strtotime ($jahr. 'W' . str_pad ($kw, 2, 0, STR_PAD_LEFT). ' +1 week'));
    
    echo "previousWeek:     " . $kwBack['kw'] . "-" . $kwBack['jahr'];
    echo "<br>currentWeek:  " . $kw . "-" . $jahr;
    echo "<br>nextWeek:     " . $kwNext['kw'] . "-" . $kwNext['jahr'];
    echo "<br>";
    
    // Build the links
    
    $urlBack = $_SERVER['PHP_SELF'] . "?" . http_build_query ($kwBack);
    $urlNext = $_SERVER['PHP_SELF'] . "?" . http_build_query ($kwNext);
    
    echo "Previous week: ". $urlBack . "<br>";
    echo "Next week: ". $urlNext;
    

    【讨论】:

      【解决方案5】:

      我们知道一年可能介于 52 或 53 周之间。所以,我在这里创建了一个接收当前周和当前年份的函数。如果这是真的,很明显前一周将是前一年的最后一周,所以通过我给这个函数的变量 year,我减去 1 得到值还是上一年,我试着知道今年有多少周,在这种情况下,例如是第 1 周的前一周。否则,我将当前周的值减去 1,得到前一周的值。

      希望对你有所帮助

      函数 PreviusWeekNumber($ActualWeek, $Year){

           if($ActualWeek === 1){
               
               $TransformYearIntolastYear = $Year -1;
                  
                  $date = new DateTime;
                  $date->setISODate($TransformYearIntolastYear, 53);
                  $Result =  ($date->format("W") === "53" ? 53 : 52);
               
           }else{
               
               $Result = $ActualWeek -1;
               
           }
           
           return $Result;
           
       }
      

      【讨论】:

      • 虽然此代码可以解决问题,including an explanation 说明如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提出问题的人。请edit您的答案添加解释并说明适用的限制和假设。
      【解决方案6】:

      检查一下

      $year = 2013; // Retrieved from the DB
      $week = 1;
      $prev_week = date("W",strtotime($year. 'W'.str_pad($week, 2, 0, STR_PAD_LEFT). ' -1 week'));
      echo $prev_week; // returns 52
      

      显示年份的演示:

      $year = 2013; // Retrieved from the DB
      $week = 1;
      $prev_week = date("W - Y",strtotime($year. 'W'.str_pad($week, 2, 0, STR_PAD_LEFT). ' -1 week'));
      echo $prev_week; // returns 52 - 2012
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-22
        • 1970-01-01
        • 1970-01-01
        • 2017-09-16
        • 2016-02-12
        • 2022-06-29
        • 2019-10-11
        • 1970-01-01
        相关资源
        最近更新 更多