从mysql表中获取一系列天数,其中包括From / To日期之间的天数

时间:2011-04-05 23:43:39

标签: php strtotime

如果这有点简单,我道歉,但我一直在谷歌和googleing,似乎无法找到我正在寻找的东西。

我有一个日历脚本,允许用户上传持续一天以上的事件。它将事件存储在mysql数据库表中,该表将日期和日期存储在不同的列中。

当我尝试从表中提取日期并将日期存储为数组时,包括来自/到日期之间的日期,以便它们可以在日历中突出显示,脚本超时告诉我它已用完了从/到日期之间的日期行的内存。当然这不可能是正确的,因为桌子只举行我的测试活动,它只持续一周。

可能有一种更简单的方法可以一起完成这一切,如果我的脚本存在其他问题,我也不会感到惊讶,所以任何和所有输入都非常受欢迎。谢谢!

这是snipet:

$FromDate=date("Y-m-d", strtotime($Calendar['FromDate']));
$ToDate=date("Y-m-d", strtotime($Calendar['ToDate']));
while($FromDate < $ToDate){
    // below is the line it times out on.
    $StartDate=date("Y-m-d", strtotime("+1 day", strtotime($FromDate))); 
    $EventDays[]=date("d", strtotime($StartDate));
}

3 个答案:

答案 0 :(得分:1)

它看起来像一个简单的无限循环,因为你永远不会改变$FromDate$ToDate所以while(...)永远不会停止而你的内存耗尽,因为你总是一次又一次地存储相同的日期

我认为您要将$StartDate重命名为$FromDate以获取您所谴责的行为。

答案 1 :(得分:1)

如果您使用的是PHP 5.3,那么这是一个使用DatePeriod的绝佳机会。

<?php
$start = new DateTime('2011-01-01');
$interval = new DateInterval('P1D');
$end = new DateTime('2011-01-28');
// Modify end by one day, so the end date is included.
$period = new DatePeriod($start, $interval, $end->modify('+1 day'));
$eventdays = array();

foreach($period as $date) {
    $eventdays[] = $date->format('d');
} 

var_dump($eventdays);

答案 2 :(得分:0)

你为什么不......

SELECT * FROM events WHERE datum BETWEEN '2011-4-6' AND '2011-4-12';

用SQL然后用PHP做其他事情?