将PHP日期范围转换为MYSQL单个日期


Converting PHP date range to MYSQL individual dates

我有一个可用性日历,我目前正在其中逐个添加日期,并使用mysql查询来确定是否存在具有特定日期的行,并将当天的类别更改为"已预订"(红色)。

我想在表单中输入一个范围,并通过php(或mysql)将其处理为多个单独的日期。我的日期格式是M/D/YYYY或MM/DD/YYYY,两者都可以接受。不幸的是,当我构建日历时,我没有使用sql中的日期格式作为条目,而是使用varchar。

有没有一种方法可以输入我的表单,例如2014年1月1日至2014年3月1日,并让php将其转换为2014年1日、2014年2月1日和2014年3日,然后使用mysql INSERT查询一次插入多个值?

if (empty($_POST) === false && empty($errors) === true) {
$adcp_data = array(
'date'      => $_POST['date'],
'customer'  => $_POST['customer'],
'notes'     => $_POST['notes'],
            );
insert_adcp($adcp_data);
header('Location: adcp.php?success');
exit();

insert_adcp函数如下所示:

function insert_adcp ($adcp_data) {
    array_walk($adcp_data, 'array_sanitize');
    $fields = '`' . implode('`, `', array_keys($adcp_data)) . '`';
    $data = '''' . implode(''', ''', $adcp_data) . '''';
    mysql_query("INSERT INTO `adcp` ($fields) VALUES ($data)");

}

我的解决方法和最后手段是添加多个文本输入,只需手动添加多个日期,这样我只需要提交一次。但射程要快得多!

最后一点,如果我能让这些多个条目将每个日期的"客户"answers"备注"值保持在这个范围内,那将是令人惊讶的。我已经做好了失去这些领域的准备。感谢

类似于:

$day = new DateTime($_POST['range_start']);
$end = new DateTime($_POST['range_end']);
$all_dates = array();
while ($day <= $end){
  $all_dates[] = $day;
  $day->add(new DateInterval('P1D'));
}

这将为您提供一个DateTime对象数组,每个对象代表您范围内的一天。通过调用DateTime::format()并将"m/d/Y"作为格式字符串传递,可以将每个对象返回到一个字符串中。

至于在MySQL中获取多个条目,INSERT语法允许INSERT INTO table (column) VALUES (row1), (row2), ... (rowN)

(这显然没有经过测试,也不是你要使用的最终代码——只是从内存中写入这个web表单……你必须通过输入卫生和范围检查等方式正确地写出它。)

检查输入的值是否与范围格式匹配,捕获部分并生成从和日期。

if (preg_match('%'A(?<fromMonth>'d{1,2})/(?<fromDay>'d{1,2})/(?<fromYear>'d{4})-(?<toMonth>'d{1,2})/(?<toDay>'d{1,2})/(?<toYear>'d{4})'Z%', $str, $res)) {
    $dates['from'] = mktime(0, 0, 0, $res['fromMonth'], $res['fromDay'], $res['fromYear']);
    $dates['to']   = mktime(0, 0, 0, $res['toMonth'], $res['toDay'], $res['toYear']);
}

生成从日期到结束日期之间的范围。

for ($date = $dates['from']; $date <= $dates['to']; $date = strtotime('+1 day', $date) ){
    $dates['range'][] = date('m-d-Y', $date);
}

我认为strtotime更适合您的情况。您可以在php.net网站上找到定义:http://php.net/manual/en/function.strtotime.php