Php 如何了解下一周的ISO 8601?
假设我有Php 如何了解下一周的ISO 8601?,php,date,iso8601,Php,Date,Iso8601,假设我有$year和$week变量,它们包含一周的ISO 8601表示形式。我想计算一下前几周和后几周。在一年的大部分时间里,这是一项简单的任务,因为我只需要增加或减少$week变量,但在两年的时间里,我需要检查我们是否开始了新的一年 我创造了这样的东西: public function nextweek($year, $week) { $maxweek = 0;//@TODO if ($week + 1 == $maxweek) { $year++;
$year
和$week
变量,它们包含一周的ISO 8601表示形式。我想计算一下前几周和后几周。在一年的大部分时间里,这是一项简单的任务,因为我只需要增加或减少$week
变量,但在两年的时间里,我需要检查我们是否开始了新的一年
我创造了这样的东西:
public function nextweek($year, $week)
{
$maxweek = 0;//@TODO
if ($week + 1 == $maxweek)
{
$year++;
$week = 1;
}
else
{
$week++;
}
$nextweek = $year.'/'.$week;
return $nextweek;
}
是否有一个完整的、更好的解决方案或内置的功能?最后我找到了一个解决方案
public function nextweek($year, $week)
{
$date = new DateTime;
$date->setISODate($year, ++$week);
if (!($date->format('W') == $week))
{
$week = '01';
++$year;
}
return $year.'/'.$week;
}
或者对于PHP<5.2
function nextweek($year, $week) {
$nextWeek = strtotime($year.'W'.sprintf("%02d", $week)) + (7 * 24 * 60 * 60);
return date('Y/W', $nextWeek);
}
年份包装有问题。对于
nextweek(2013,52)
它会打印2013/01
。还没有发现错误。所以最好坚持使用DateTime
为什么不使用$year
和$week
来获取内部日期,从中添加/减去7,然后使用date()
来获取ISO周?