1

みなさん、こんにちは。私は自分が持っているPHPファイル内でMySQLからデータを取得しようとしています。ユーザーが日付(現在は「$ selectedDate」で表されています)を渡したので、その日付に一致するすべてのイベントをクエリにプルさせたいと思います。

問題は、MySQLの日付がUNIX形式であるということです。つまり、時間や秒などがあります。渡された日付は日付のみであるため、完全に一致することはありません。

したがって、私がやろうとしているのは、日付を取得し、マイナス1日である変数と、プラス1日である変数を追加し、その範囲に基づいてイベントをプルすることです。

問題は、それが機能していないことであり、理由がわかりません!約2日間のトラブルシューティングと検索の後、私はあなたに私のスタックオーバーフローの友達を頼りにしています!

何か案は?

  $selectedDate = '9-20-2012';
  $dateComponents = preg_split('~[+*/-]~', $selectedDate);
  $date1 = mktime(0, 0, 0, ( (int)$dateComponents[0] ), (int)$dateComponents[1]-1, (int)$dateComponents[2]);
  $date2 = mktime(0, 0, 0, ( (int)$dateComponents[0] ), (int)$dateComponents[1]+1, (int)$dateComponents[2]);

  $query = "SELECT id,title,start, DATE_FORMAT(start, '%Y-%m-%d %H:%i' ) AS startDate, end, url, className FROM $tableName WHERE start BETWEEN '$date1' AND '$date2' ORDER BY start";

  $result = mysql_query($query) or die(mysql_error());
  $array = array();

  while($row = mysql_fetch_assoc($result)){
        echo($row);
       $array[] = $row; 

  }  

ありがとう!

4

5 に答える 5

1

SQLに渡す前に、日付に分と秒を追加できます。

  $selectedDate = '9-20-2012';
  $dateComponents = preg_split('~[+*/-]~', $selectedDate);
  $date1 = mktime(0, 0, 0, ( (int)$dateComponents[0] ), (int)$dateComponents[1]-1, (int)$dateComponents[2]);
  $date2 = mktime(0, 0, 0, ( (int)$dateComponents[0] ), (int)$dateComponents[1]+1, (int)$dateComponents[2]);

  $date1 = date('Y-m-d h:i',$date1);
  $date2 = date('Y-m-d h:i',$date2);

  $query = "SELECT id,title,start, DATE_FORMAT(start, '%Y-%m-%d %H:%i' ) AS startDate, end, url, className FROM $tableName WHERE start BETWEEN '$date1' AND '$date2' ORDER BY start";
于 2012-09-20T16:53:11.550 に答える
0

次のようなことを行うことで、間を使用しない方がよい場合があります。

$selectedDate = '9-20-2012';
$dateComponents = preg_split('~[+*/-]~', $selectedDate);
$date = date('Y-m-d', mktime(0, 0, 0, $dateComponents[0], $dateComponents[1], $dateComponents[2]));

$query = "SELECT id, title, start, DATE_FORMAT(start, '%Y-%m-%d %H:%i') AS startDate, end, url, className FROM $tableName WHERE DATE(start) = DATE($date) ORDER BY start";

このようにすると、日付部分のみを比較し、単に時刻を無視することになります。実際に実際の間隔と指定された日付のエントリだけを取得する必要がない場合、IMOはかなり適切な方法です。

于 2012-09-20T16:57:40.520 に答える
0

あなたは次の方法を試すことができます

$start = strtotime("-1 day", strtotime('09-12-2012'));
$end = strtotime("+1 day", strtotime('09-12-2012'));

$result = my_sql_query("
          Select * FROM tablename 
          WHERE DATE(FROM_UNIXTIME(date_field)) 
          BETWEEN FROM_UNIXTIME($start) AND FROM_UNIXTIME($end)");
于 2012-09-20T16:51:25.720 に答える
0
SELECT id, title, start, DATE_FORMAT(start, '%Y-%m-%d %H:%i' ) AS startDate, end, url, className 
FROM $tableName 
WHERE FROM_UNIXTIME(start) BETWEEN '2012-09-01' - interval 1 day AND '2012-09-01' + interval 1 day 
ORDER BY start
于 2012-09-20T16:52:29.883 に答える
-1

mysqlクエリの前に日付をunixtimeに変換できると思います。それはあなたがどんなフォーマットでも日付を得るのを助けることができます。

$date = '9-20-2012';
$unixtime = strtotime(str_replace ('-', '/', $date). ' 00:00');
于 2012-09-20T17:12:12.167 に答える