Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何了解下一周的ISO 8601?_Php_Date_Iso8601 - Fatal编程技术网

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周?