0

我正在考虑尝试设置和阵列,看起来像这样:

$dates = array(
    [0] => "07/11/2013",
    [1] => "14/11/2013",
    [2] => "21/11/2013",
    [3] => "28/11/2013",
    [4] => "05/12/2013",
    [5] => "12/12/2013");

我愿意使用它,但由于我希望明年再次出现这种情况,我希望让 PHP 执行此操作并将其输入到我的数组中。我知道如何将其限制为我想要的特定数量,但如果我想开始,我不知道如何在当前日期或特定日期添加一周08/11/2013

我快速浏览了一下,似乎找不到任何这样做的东西。

我只需要一个脚本来为当前日期添加一周,目前是每周四,然后将其添加到数组中。

我唯一的问题是我不确定如何指定日期,然后每次添加一周。我认为for这里最好有一个循环。

4

4 回答 4

4

使用DateTime类。DateInterval 和 DatePeriod 类是在 PHP 5.3.0 中引入的,因此以下解决方案仅适用于 PHP >= 5.3.0:

$start = new DateTime('2013-11-07');
$end = new DateTime('2013-12-31');
$interval = new DateInterval('P1W');  // one week

$p = new DatePeriod($start, $interval, $end);

foreach ($p as $w) {
    $weeks[] = $w->format('d-m-Y');
}

演示!

正如 Glavic 在下面的评论中指出的那样,这也可以在以前的 PHP 版本中使用以下modify()方法完成:

$start = new DateTime('2013-11-07');
$end = new DateTime('2013-12-31');

$weeks = array();
while ($start < $end) {
    $weeks[] = $start->format('d-m-Y');
    $start->modify('+1 week');
}

演示。

于 2013-11-07T16:22:43.847 回答
1

您可以strtotime('+1 week', $unixTimestamp)为此使用:

<?php
    $startDate = '2013-11-07';
    $endDate = '2013-12-31';

    $startDateUnix = strtotime($startDate);
    $endDateUnix = strtotime($endDate);

    $dates = array();

    while ($startDateUnix < $endDateUnix) {
        $dates[] = date('Y-m-d', $startDateUnix);
        $startDateUnix = strtotime('+1 week', $startDateUnix);
    }

    print_r($dates);
?>

输出:

Array
(
    [0] => 2013-11-07
    [1] => 2013-11-14
    [2] => 2013-11-21
    [3] => 2013-11-28
    [4] => 2013-12-05
    [5] => 2013-12-12
    [6] => 2013-12-19
    [7] => 2013-12-26
)

演示

date()以您想要的任何方式格式化呼叫以获得所需的格式)。

于 2013-11-07T16:16:59.403 回答
1

strtotime做你需要的

 $nextWeek = strtotime('08/11/2013 + 1 week'); 

如果您需要 8 次,请循环 8 次。您可以使用$start$numWeek返回一个带有$numWeeks+1 值的数组的函数(添加的开头)

function createDateList($start, $numWeeks){
    $dates = array($start);// add first date
    // create a loop with $numWeeks illiterations:
    for($i=1;$<=$numWeeks; $i++){
        // Add the weeks, take the first value and add $i weeks to it
        $time = strtotime($dates[0].' + '.$i.' week'); // get epoch value
        $dates[] = date("d/M/Y", $time); // set to prefered date format

    }
    return $dates;
}
于 2013-11-07T16:15:51.513 回答
-1

strtotime()功能会在这里工作吗?

$nextweek = strtotime('thursday next week');
$date = date('d/m/Y', $nextweek);

要创建一个包含今天(或本周四)和下一个 4 的 5 元素数组:

for ($a = 0; $a < 5; $a++)
{
  $thur = date('d/m/Y', strtotime("thursday this week + $a weeks"));
  $dates[] = $thur;
}
于 2013-11-07T16:17:56.767 回答