我需要从特定的ISO周中获得Mon-Fri的日期数组。我似乎无法找到返回数组的内置方法。我使用DateTime类和setISODate方法,如下所示:
$bookingDate = new DateTime();
$bookingWeek = $bookingDate->setISODate($bookingDate->format("Y"), $bookingDate->format("W"));
$bookingDates = array();
$mon = $bookingDate->setISODate($bookingDate->format("Y"), $bookingDate->format("W"), 1);
array_push($bookingDates, $mon);
$tue = $bookingDate->setISODate($bookingDate->format("Y"), $bookingDate->format("W"), 2);
array_push($bookingDates, $tue);
$wed = $bookingDate->setISODate($bookingDate->format("Y"), $bookingDate->format("W"), 3);
array_push($bookingDates, $wed);
$thu = $bookingDate->setISODate($bookingDate->format("Y"), $bookingDate->format("W"), 4);
array_push($bookingDates, $thu);
$fri = $bookingDate->setISODate($bookingDate->format("Y"), $bookingDate->format("W"), 5);
array_push($bookingDates, $fri);
print_r($bookingDates);
但是 - 日期数组的print_r每天都会返回星期五!有没有办法达到我想要的目的?
答案 0 :(得分:1)
您正在更改相同的DateTime
实例($bookingDate
)并将其添加到数组中。最后,数组的每个元素都指向同一个DateTime
实例。它包含您最后设置的日期。那是$fri
您需要不同的实例(根据您的需要)或数组中的格式化字符串。
要在每个$bookingDate = new DateTime();
函数调用之前创建不同的实例,请添加$bookingDate->setISODate
。这将消耗很多或资源。
最好使用单个DateTime
实例并迭代它。
for($i=0;$i<7;$i++){
$year = intval($bookingDate->format("Y"));
$week = intval($bookingDate->format("W"));
$bookingDate->setISODate($year, $week, $i+1);
$bookingDates[]=$bookingDate->format(DateTime::ISO8601);
}
print_r($bookingDates);
输出
Array
(
[0] => 2013-09-16T20:23:42+0600
[1] => 2013-09-17T20:23:42+0600
[2] => 2013-09-18T20:23:42+0600
[3] => 2013-09-19T20:23:42+0600
[4] => 2013-09-20T20:23:42+0600
[5] => 2013-09-21T20:23:42+0600
[6] => 2013-09-22T20:23:42+0600
)