Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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日期_Php_Date - Fatal编程技术网

返回意外周范围的Php日期

返回意外周范围的Php日期,php,date,Php,Date,Php返回一组给定特定日期的意外周日期。例如,给定日期2015-05-20,应返回的一周天数为: array:7 [ 0 => "2015-05-17" 1 => "2015-05-18" 2 => "2015-05-19" 3 => "2015-05-20" 4 => "2015-05-21" 5 => "2015-05-22" 6 => "2015-05-23" ] 或者在2015年5月17日至23日的纯文本中。从我所能

Php返回一组给定特定日期的意外周日期。例如,给定日期
2015-05-20
,应返回的一周天数为:

array:7 [
  0 => "2015-05-17"
  1 => "2015-05-18"
  2 => "2015-05-19"
  3 => "2015-05-20"
  4 => "2015-05-21"
  5 => "2015-05-22"
  6 => "2015-05-23"
]
或者在2015年5月17日至23日的纯文本中从我所能看出是正确的。现在,根据日期
2015-05-17
,我得到以下结果:

array:7 [
  0 => "2015-05-10"
  1 => "2015-05-11"
  2 => "2015-05-12"
  3 => "2015-05-13"
  4 => "2015-05-14"
  5 => "2015-05-15"
  6 => "2015-05-16"
]
您会注意到的是2015年5月11日至16日17日之前的一周

以下是拉动我的工作日的函数:

$days_of_week = array();

for($i = 0; $i <= 6; $i ++){
  $days_of_week[] = date("Y-m-d", strtotime(date("o", strtotime($date))."W".date("W", strtotime($date)).$i));
}

我想我面临的问题是ISO-8601周的数字从周一开始到周日结束,但我尝试将一周从周日开始到周六结束(在日历上显示)。还有其他方法可以实现这一点吗

事实上,这是一个预期的结果

2015-05-17
在第20周

因此,日数和周日数分别为:(10、11、12、13、14、15、16)和(0、1、2、3、4、5、6) 请参阅文档的本地化注释部分,在:

符号 ISO年和ISO周和日:

YY "-"? "W" W "-"? [0-7]
从周日到周六,最后一个代币停留一周的天数。 因此,当你循环一周的数字时,你会得到:

2015W20[0] -> That is, a date on sunday (2015-05-10)
2015W20[1] -> That is, a date on monday (2015-05-18)
因此,您必须指定一年中正确的周数:

$days_of_week = array();
$week_number = 21;
$year        = date('Y');

for($day = 0; $day <= 6; $day++)
{
    $format = $year. "W" . $week_number.$day;
    print $format . "\n";
    array_push($days_of_week, date('Y-m-d', strtotime($format)));
}

print_r($days_of_week);
$days\u of_week=array();
$week_number=21;
$year=日期('Y');

对于($day=0;$day我解决了我的问题。忽略ISO-8601周数(1-53),我能够根据给定日期的周数(0周日-6周六)得到七天的范围


此方法根据给定日期正确返回一个七天数组,从周日开始,到周六结束。感谢@Rizier123作为此答案的主干。

@Rizier123你的答案去了哪里?还有否决票是怎么回事(不说是你)?我的答案有一个错误,我忽略了一些东西。@Rizier123啊,我明白了。我从中收集到的似乎是正确的方向,所以无论如何,谢谢!唯一的问题是你不能指定一个正确的ISO-8601周数,它从周日开始。它们默认从周一开始。。。
$days_of_week = array();
$week_number = 21;
$year        = date('Y');

for($day = 0; $day <= 6; $day++)
{
    $format = $year. "W" . $week_number.$day;
    print $format . "\n";
    array_push($days_of_week, date('Y-m-d', strtotime($format)));
}

print_r($days_of_week);
$day = new DateTime($date); // 2015-05-21
$start = $day->modify("- ".$day->format("w")." days"); // - 4 days - 2015-05-17
$end = clone $start;
$end = $start->modify("+ 7 days"); // 2015-05-24 (foreach ignores last day)

$interval = new DateInterval("P1D");
$week = new DatePeriod($start, $interval, $end);
foreach($week as $key => $val) {
  $days_of_week[] = date("Y-m-d", strtotime($val->format("Y-m-d")));
}