基于日期变量通过PHP检索MySQL事件

基于日期变量通过PHP检索MySQL事件,php,mysql,variables,date-range,Php,Mysql,Variables,Date Range,大家好:我正在尝试从我拥有的PHP文件中的MySQL获取数据。用户传入当前由“$selectedDate”表示的日期,我希望查询提取与该日期匹配的所有事件 问题是MySQL日期是unix格式的,这意味着它有小时、秒等。传入的日期仅为日期,因此不会有精确的匹配 所以我要做的是,取我的日期,加上一个负1天的变量和另一个正1天的变量,然后根据这个范围把事件拉进去 问题是它不起作用,我不知道为什么!经过大约两天的故障排除和搜索,我相信你,我的朋友们 有什么想法吗 $selectedDate = '9

大家好:我正在尝试从我拥有的PHP文件中的MySQL获取数据。用户传入当前由“$selectedDate”表示的日期,我希望查询提取与该日期匹配的所有事件

问题是MySQL日期是unix格式的,这意味着它有小时、秒等。传入的日期仅为日期,因此不会有精确的匹配

所以我要做的是,取我的日期,加上一个负1天的变量和另一个正1天的变量,然后根据这个范围把事件拉进去

问题是它不起作用,我不知道为什么!经过大约两天的故障排除和搜索,我相信你,我的朋友们

有什么想法吗

  $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; 

  }  

谢谢

您可以尝试以下方法

$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)");

在将分钟和秒传递到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";

通过这样做,您最好不要在任何情况下使用:

$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";

这样,您只需比较日期部分,而忽略时间,如果您不需要实际获取时间间隔,只需要输入所提供日期的条目,我认为这是一种相当不错的方式。

我认为您可以在mysql查询之前将日期转换为unixtime。它可以帮助您以任何格式获取日期

$date = '9-20-2012';
$unixtime = strtotime(str_replace ('-', '/', $date). ' 00:00');

谢谢GBD,但它不起作用$起始值等于-86391,结束值为86409祝福你,杰里米1026!!!它呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜!!!!!!!!!!!!!!!
$date = '9-20-2012';
$unixtime = strtotime(str_replace ('-', '/', $date). ' 00:00');