-1

我有一个网络表单,用户输入两个日期(YYYY/MM/DD)代表一个时间间隔和关于一天活动的其他信息。

示例:他选择 2013/09/12 至 2013/10/02 活动:游泳

在这种情况下,我的表格将如下所示:

   date     |  activity
2013/09/12  |  swimming
2013/09/13  |  swimming
2013/09/14  |  swimming
2013/09/15  |  swimming
2013/09/16  |  swimming

等等....

我必须为用户提供的日期的每一天写一行活动

我可以在不手动迭代几天的情况下做到这一点吗?我正在使用 php+mysqli

编辑:我不能使用两列作为开始和结束日期

4

3 回答 3

2

我认为最好制作两列(例如 start_day 和 end_day)。

如果无法更改您的数据库结构,您可以尝试以下操作:

PHP:

$last_date = $start_date;
$ready = false;
while ($ready === false) {
    $last_date = date('Y-m-d', strtotime($last_date . ' + 1 day'));+

    // add $last_date to your mysql table here

    if ($last_date == $stop_date) {
      $ready = true;
    }
}

它未经测试,但我希望它有效;)

于 2013-09-12T09:24:31.017 回答
0

在表格中使用 2 个不同的日期列;一个用于开始日期,一个用于结束日期,然后您可以将活动的开始日期和结束日期分别添加到每个日期。

于 2013-09-12T09:24:45.017 回答
-1

如果您可以使用程序,我可以给您一个线索:

DELIMITER $$

DROP PROCEDURE IF EXISTS `dowhile_thing`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `dowhile_thing`(dt_start DATE,dt_stop DATE, thing CHAR(20))
BEGIN
  DECLARE v1 INT DEFAULT 0;
CREATE TEMPORARY TABLE tmp (
  `day_name` VARCHAR(256) DEFAULT NULL,
  `date_change` DATE DEFAULT NULL,
  thing CHAR(20)
) ENGINE=MYISAM DEFAULT CHARSET=utf8  ;  


  SELECT TIMESTAMPDIFF(DAY, dt_start, dt_stop)+1  INTO v1;
  WHILE v1 > -1 DO
    INSERT tmp (SELECT DAYNAME( ADDDATE(dt_start, INTERVAL v1 DAY) ),ADDDATE(dt_start, INTERVAL v1 DAY),thing );
    SET v1 = v1 - 1;
  END WHILE;

SELECT * FROM tmp;  
DROP TEMPORARY TABLE IF EXISTS tmp;  

    END$$

DELIMITER ;

然后调用:

CALL dowhile_thing('2013-06-10','2013-06-14','swim');

结果:

日期名称 | 日期更改 | 事物

星期六 | 2013-06-15 | 游泳

星期五 | 2013-06-14 | 游泳

...

于 2013-09-12T09:33:31.687 回答