我目前需要从传递 php 周数的变量中获取前一周,所以如果是第 13 周,我将得到第 12 周。
我面临的问题是,如果我在第 1 周时从原始数字中减去 1,它将返回第 0 周,除非我创建一个 if 语句,即:
if($week==1)
{
$prev_week=52;
$prev_year=$year-1;
}
这是假设 php 从 1 而不是 0 开始计算周数。这似乎有点笨拙,我认为可能有更好的方法来利用 PHP 的许多日期和时间函数来做到这一点。
试试这个:
$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' ) );
$PreviousWeek = date("W",strtotime("-1 week"));
我认为我可能会使问题过于复杂 - 基本上我需要从选定一周的前几周出现的数据库中获取结果,因此如果一年中有 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')
我尚未对此进行测试,但认为它应该可以完成这项工作。
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;
我们知道一年可以在 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;
}
检查这个
$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