2014-03-31 27 views
0

我有array()週日重複我的事件。可重複的活動php

[days_repeat] => Array 
    (
     [0] => 1 
     [1] => 2 
     [2] => 3 
    ) 

1,2,3是事件應重複每星期一,星期二,星期三,但我也有

[start_date] => 2014-04-2 
[end_date] => 2014-05-30 

正如你可以看到一天開始是不是第一天重複,如果當年是比較容易,只是循環,使日期和破環,當日期比結束日期,大,但也許你可以建議我一些好的戰術來實現這一

天重複陣列只能包含一週天數等等!

回答

1

試試這個:

$daysRepeat = array(1,2,3); 
$startDate = '2014-04-02'; 
$endDate = '2014-05-30'; 

//Convert to timestamps; 
$startDateTstamp = strtotime($startDate); 
$endDateTstamp = strtotime($endDate); 

//Loop through days between start and end date 
$tstamp = $startDateTstamp; 
while($tstamp < $endDateTstamp) { 

    //Calculate numerical representation of week day (1-7) 
    $weekDay = date('N', $tstamp); 
    if(in_array($weekDay, $daysRepeat)) { 
     print date('Y-m-d', $tstamp) . "<br />"; 
    } 
    $tstamp += (60*60*24); 
} 

輸出:

2014-04-02 
2014-04-07 
2014-04-08 
2014-04-09 
2014-04-14 
2014-04-15 
2014-04-16 
2014-04-21 
2014-04-22 
2014-04-23 
2014-04-28 
2014-04-29 
2014-04-30 
2014-05-05 
2014-05-06 
2014-05-07 
2014-05-12 
2014-05-13 
2014-05-14 
2014-05-19 
2014-05-20 
2014-05-21 
2014-05-26 
2014-05-27 
2014-05-28 
2

首先,將start_date轉換爲時間戳。通過6

echo date('w', $your_timestamp); 

你搞懂是什麼日子FIRST_DATE,0的日(星期日)(星期六):

然後使用PHP date()功能等。

然後只是循環,並經過你的日子檢查它們是否匹配你的數組。

1

如果您的數據代表在一週之內天(一週至一週的第七天所以第一天),比你只需要檢查當前顯示的一天,如果它同「daynumber」

例如。

echo (new DateTime())->format("w"); 

將打印

1 

週一

看到文檔的更多信息。 http://www.php.net/manual/en/function.date.php

所以你只需要檢查,如果當前daynumber在你的重複數組!

1

你可以用這個代碼實現這一點:

<?php 
    $days_repeat = array(
     '1', // Monday 
     '2', // Tuesday 
     '3', // Wednesday 
    ); 

    // first set timezone 
    date_default_timezone_set('UTC'); 

    // Start date 
    $date = '2014-04-02'; 
    // End date 
    $end_date = '2014-05-30'; 

    while (strtotime($date) <= strtotime($end_date)) { 
     // first find out which day of the week it is (0=sunday; 1=monday ... 6=saturday) 
     $dateWeekDay = date("w", $date); 

     // convert sunday from 0 to 7 if needed 
     if ($dateWeekDay == 0) { $dateWeekDay = 7; } 

     // check if $days_repeat has current day 
     if (in_array($dateWeekDay, $days_repeat)) { 
      // do action as this day is in $days_repeat 
      echo date("Y-m-d"). ' is in $days_repeat'; 
     } 

     // add +1 day and continue loop 
     $date = date("Y-m-d", strtotime("+1 day", strtotime($date))); 
    } 

?> 
1

方便的是,你是根據代表星期幾ISO-8601規範。這意味着你可以使用PHP內置的date()函數,而不需要額外的格式轉換。這很好。

接下來,您需要弄清楚如何將您的start_dateend_date轉換爲PHP可以理解的日期格式。它看起來像mktime()是你最好的選擇 - 如果你不關心它們,將時間元素初始化爲0。

您現在可以按天迭代,並且如果date("N", $currentDay)位於您想要的日期陣列中,請在當天重複該事件(無論是否需要)。在這裏,$currentDay是您檢查的循環時間戳。 date("N")返回與manual page for date()中指定的相同的ISO-8601格式星期幾號。