【问题标题】:PHP Array of Dates from ISO Week来自 ISO 周的 PHP 日期数组
【发布时间】:2013-09-21 12:58:57
【问题描述】:

我需要一组特定 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 将每天返回为星期五!有没有办法实现我想要的?

【问题讨论】:

标签: php arrays datetime


【解决方案1】:

您正在更改相同的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
)

【讨论】:

  • string 的数组 - 你认为 OP 想要一个 DateTime 的数组并不重要?也许不是,但可能有一个很好的理由。
  • @davidkonrad 显然有一个很好的理由。这就是为什么我首先展示了如何制作一个 DateTime 的数组。
猜你喜欢
  • 2022-01-11
  • 2018-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-25
  • 1970-01-01
  • 2011-08-18
相关资源
最近更新 更多