我需要有一个特定ISO周的周一至周五的日期数组。我似乎找不到返回数组的内置方法。我正在使用带有setISODate方法的DateTime类,如下所示:
$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每天返回为星期五!有没有办法实现我想要的?
您正在更改相同的DateTime
实例 ( $bookingDate
) 并将其添加到数组中。最后,数组的每个元素都指向同一个DateTime
实例。它包含您上次设置的日期。这是$fri
您需要不同的实例(取决于您的需要)或数组中的格式化字符串。
要创建不同的实例,请在每次$bookingDate->setISODate
函数调用之前添加$bookingDate = new DateTime();
。这将消耗大量资源。
最好使用单个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
)