0

我正在尝试将日期与 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 />";


}               

?>
4

3 回答 3

0

我假设您使用 Mysql 日期类型字段作为boosterDate

检查你的mysql数据库时区

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

检查您的 php 时区

date_default_timezone_get

确保它们匹配,如果不调整匹配

于 2013-10-29T03:51:52.167 回答
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;

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

于 2013-10-29T03:58:08.187 回答
0

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

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

}
...
于 2013-10-29T03:59:03.193 回答