0

これは、次の 7 日間の予定を引き出す私のイベント スクリプトです。正常に動作しているように見えますが、1 つの条件の下でのみ........日付と時刻は mysql db に datetime 形式で保持されているため、2013- 12-23 08:30:00 . 私のスクリプトは毎日印刷され、荷物を降ろしたり受け取ったりする顧客のその日の予定を見つけます。mysql はデータベースを調べて、ドロップオフまたはピックアップフィールドを持つ顧客を印刷されている日付と照合し、日付の下の div に追加します。

私が抱えている問題は、時間が 00:00:00 以外に設定されている場合、その日のその顧客をピックアップしないことです。時間を無視して日付のみを使用するように比較するにはどうすればよいですか?

            // Date box container
    echo '<div class="dateboxcontainer">';

    // Loop through and create a date for the next 7 days
    $days = new DatePeriod(new DateTime, new DateInterval('P1D'), 7); 
    foreach ($days as $day) {
    echo '<div class="datebox">';
    echo '<div class="topdate">';

          echo strtoupper($day->format('D d')) . PHP_EOL;
    echo '</div>';  

              // Get the names for each day
          $theday = strtoupper($day->format('Y-m-d'));    
          $sqldate = <<<SQL
        SELECT *
        FROM `jobdetails`
        WHERE datedroppingoff = '$theday' OR datepickingup = '$theday'
    SQL;
    if(!$resultdate = $db->query($sqldate)){
        die('There was an error running the query [' . $db->error . ']');
    }
    while($rowdate = $resultdate->fetch_assoc()){
        echo $rowdate['name'];
            }
         //

    echo '</div>';
    }  
    echo '</div>';
    //
4

2 に答える 2

1

現在行っていることは、日付/時刻の値を日付の値と比較することです。時刻の部分が午前 0 時以外の場合、この比較は失敗します。

DATE()MySql 関数を使用してリンゴとリンゴを比較することで、比較を修正できます。

WHERE DATE(datedroppingoff) = '$theday' OR DATE(datepickingup) = '$theday'

同じことを行う他の方法があります。たとえば、

WHERE DATEDIFF(datedroppingoff, '$theday') = 0 OR ...

手元に値がある場合は、次の$nextdayこともできます

WHERE (datedroppingoff >= '$theday' AND datedroppingoff < '$nextday') OR ...
于 2013-07-23T09:26:54.600 に答える
0

特定の日時を mySQL に保存していますが、SQL クエリで日付のみを検索します。mySQL は、完全な 1 日を検索する場合と特定の時点を検索する場合の違いを認識しないため、mySQL は 0:00:00 の日付を検索していると想定します。

いくつかのオプションがあり、期間を検索できます (疑似コード、国境を自分で確認してください)。

WHERE datedroppingoff > '$theday' AND datedroppingoff < '$theday'+1

別のオプションは、日付と時刻を別々のデータベース フィールドに格納することです。そうすれば、SQL クエリをよりシンプルに保つことができます。

幸運を。

于 2013-07-23T09:32:03.090 に答える