使用php和mysql数据库比较两个日期

时间:2013-10-29 03:46:29

标签: php mysql sql date datetime

我正在尝试将日期与MySQL数据库中的日期进行比较,该日期大于当前日期的90,60,30天。我正在使用DateTime对象,它很容易操作,但我遇到问题得到我正在寻找的响应。非常感谢任何帮助。

<?php
//date_default_timezone_set('America/Chicago');
$todaysDate = new DateTime('now');
$formattedDate = $todaysDate->format('Y-m-d');

$date = new DateTime ('now');
$date90 = $date->add(new DateInterval('P90D'));
$date90 = $date->format('Y-m-d');

$date = new DateTime ('now');
$date60 = $date->add(new DateInterval('P60D'));
$date60 = $date->format('Y-m-d');

$date = new DateTime ('now');
$date30 = $date->add(new DateInterval('P30D'));
$date30 = $date->format('Y-m-d');

//echo $date90;
//echo "<br />";
//echo $formattedDate;

$thirtyDays = array();
$sixtyDays = array();
$ninetyDays = array();


$sql = "SELECT * FROM service;";

if(!$result = $con->query($sql)){
die('There was an error running the query [' . $con->error . ']');  
}else{              
    //$numRows = $result->num_rows;
    while($row = $result->fetch_array()){
        $boosterDate = $row['boosterDate'];

    }

}

if($boosterDate > $date90){
    echo "greater than 90 days";
    echo "<br />";


}               

?>

3 个答案:

答案 0 :(得分:0)

我假设您正在使用Mysql日期类型字段 boosterDate

检查你的mysql数据库时区

SELECT @@global.time_zone, @@session.time_zone;

检查你的php时区

date_default_timezone_get

确保它们匹配,如果不匹配则匹配

答案 1 :(得分:0)

不确定这是否是您想到的修复,但是当数据库处理它时,我不喜欢应用程序中的日期更改...您可以在SQL中完成所有操作。

SELECT s.*,
  CASE WHEN DATE(boosterDate) > DATE_ADD(DATE(NOW()),INTERVAL 90 DAY) THEN 90
       WHEN DATE(boosterDate) > DATE_ADD(DATE(NOW()),INTERVAL 60 DAY) THEN 60
       WHEN DATE(boosterDate) > DATE_ADD(DATE(NOW()),INTERVAL 30 DAY) THEN 30
       ELSE NULL END AS date_range_test
  FROM service s;

这将返回“service”表中的列以及包含90,60,30或NULL的额外“date_range_test”列。 CASE表达式中的第一个匹配获胜。额外的好处是,您可以手动运行此查询并轻松查看每行的输出。如上所述,这会将所有内容截断到比较之前的某个午夜。

答案 2 :(得分:0)

您只能以DateTime格式比较日期,但在您的情况下,$boosterDate是一个字符串。您的代码应如下所示:

...
while($row = $result->fetch_array()){
    $boosterDate = date('Y-m-d H:i:s', strtotime(str_replace('-', '/', $row['boosterDate'])));

}
...