从php周号获取前一周的数字

时间:2013-01-28 11:53:10

标签: php date time

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

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

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

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

6 个答案:

答案 0 :(得分:4)

试试这个:

$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' ) );

答案 1 :(得分:2)

  $PreviousWeek=date("W",strtotime("-1 week"));
Get previous week number.

答案 2 :(得分: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')

我还没有对此进行测试,但认为它应该可以胜任。

答案 3 :(得分:1)

HamZa和网络游牧民族的答案帮助我更进一步确保,我得到了正确的一年。根据ISO-8601(欧洲使用的),使用date ('Y')可能会导致意外行为,因为它可能发生,第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

一起查看所有代码,e。 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;

答案 4 :(得分:1)

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

我希望我有帮助

function 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;
     
 }

答案 5 :(得分: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