簡體   English   中英

將PHP日期范圍轉換為MYSQL單個日期

[英]Converting PHP date range to MYSQL individual dates

我有一個可用性日歷,當前正在其中逐個添加日期,並使用mysql查詢來確定是否存在具有特定日期的行,並將當天的類別更改為“已預訂”(紅色)。

我想在我的表單中輸入一個范圍,並通過php(或mysql)將其處理成多個單獨的日期。 我的日期格式為M / D / YYYY或MM / DD / YYYY,兩者都可以接受。 不幸的是,當我建立日歷時,我沒有使用sql中的日期格式輸入條目,而是使用了varchar。

有沒有一種方法可以進入我的表單,例如1/1 / 2014-1 / 3/2014並讓php將其轉換為1/1 / 2014、1 / 2 / 2014、1 / 3/2014,然后有一個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)");

}

我的解決方法和最后的解決方法是添加多個文本輸入,並手動添加多個日期,因此我只需要提交一次即可。 但是范圍要快得多!

最后要注意的是,如果我可以擁有多個條目,則將每個日期的“客戶”和“便箋”值保持在驚人的范圍內。 我准備失去那些領域,盡管要做這項工作。 謝謝

就像是:

$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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM