1

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

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

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

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

4

6 回答 6

7

试试这个:

$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' ) );
于 2013-01-28T12:11:05.570 回答
3
$PreviousWeek = date("W",strtotime("-1 week"));
于 2015-07-20T10:37:47.080 回答
1

我认为我可能会使问题过于复杂 - 基本上我需要从选定一周的前几周出现的数据库中获取结果,因此如果一年中有 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')

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

于 2013-01-28T12:37:46.647 回答
1

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')回报:

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

使用date ('o')回报:

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

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

$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;
于 2014-12-13T16:10:48.520 回答
1

我们知道一年可以在 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;
     
 }
于 2021-02-08T10:32:21.137 回答
0

检查这个

$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
于 2013-01-28T12:28:21.047 回答