我有array()
个工作日来重复我的活动。
[days_repeat] => Array
(
[0] => 1
[1] => 2
[2] => 3
)
每天星期一,星期三,星期三,事件应该重复1,2,3,但我也是
[start_date] => 2014-04-2
[end_date] => 2014-05-30
你可以看到开始日不是重复的第一天,如果它更容易,只需循环并制作日期和中断循环,当日期大于结束日期时,但也许你可以告诉我一些很好的策略来实现这个目标
天重复数组只能包含工作日数字等等!
答案 0 :(得分:2)
首先,将start_date
转换为时间戳。
然后使用php date()
函数:
echo date('w', $your_timestamp);
你可以知道first_date,0(星期日)到6(星期六)的哪一天。
然后只需循环检查它们是否与您的阵列匹配。
答案 1 :(得分:1)
如果您的数据代表一周内的天数(即一周的第一天直到一周的第七天),那么您只需要检查当前显示的日期,如果它的相同“天数”
例如
echo (new DateTime())->format("w");
将打印
1
星期一
查看文档以获取更多信息。 http://www.php.net/manual/en/function.date.php
所以你只需要检查当前的日期是否在你的重复数组中!
答案 2 :(得分: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
答案 3 :(得分: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)));
}
?>
答案 4 :(得分:1)
方便地,您根据ISO-8601规范表示星期几。这意味着您可以使用PHP的内置date()
功能,而无需对您的格式进行其他翻译。那很好。
接下来,您需要弄清楚如何将start_date
和end_date
转换为PHP可以理解的日期格式。看起来mktime()是您最好的选择 - 如果您不关心它们,请将时间元素初始化为0。
您现在可以按天迭代,如果date("N", $currentDay)
在您想要的日期数组中,请在当天重复该事件(无论需要什么)。在这里,$currentDay
是您要检查的循环时间戳。 date("N")
返回manual page for date()中指定的相同ISO-8601格式的星期几编号。