Php 日期问题
我的数据库有y m d字段,在月份和日期中没有前导零。我正试着将一份记录y-m-d与今天的日期进行比较。大于或等于显示绿灯图像,否则显示红灯。它不起作用了!救命啊Php 日期问题,php,mysql,date,Php,Mysql,Date,我的数据库有y m d字段,在月份和日期中没有前导零。我正试着将一份记录y-m-d与今天的日期进行比较。大于或等于显示绿灯图像,否则显示红灯。它不起作用了!救命啊 $q = "SELECT * FROM pec_mbbtmssgs WHERE activity='bike' AND CONCAT(`y`,'-','m','-','d') >= date('Y-n-j')"; $r = mysql_query($q); $row = mysql_fetch_assoc($r); $
$q = "SELECT * FROM pec_mbbtmssgs WHERE activity='bike' AND CONCAT(`y`,'-','m','-','d') >= date('Y-n-j')";
$r = mysql_query($q);
$row = mysql_fetch_assoc($r);
$activity = $row['activity'];
if($activity == "bike") {
$image = "greenlight25";
}
else {
$image = "redlight25";
}
echo '<img src=http://img/' . $image . '.gif />';
?>
$q=“从pec_mbbtmssg中选择*,其中活动='bike'和CONCAT('y','m','m','d')>=日期('y-n-j')”;
$r=mysql\u查询($q);
$row=mysql\u fetch\u assoc($r);
$activity=$row['activity'];
如果($activity==“bike”){
$image=“greenlight25”;
}
否则{
$image=“redlight25”;
}
回声';
?>
您对CONCAT()
的使用有点不恰当,因为数据库列要么用反勾号包装,要么什么都不包装,字符串/分隔符用单引号括起来”
您也可以通过执行DATE(NOW())
来获取当前日期,并与之进行比较。然后将DATE()
与CONCAT()的结果一起使用,结果如下
SELECT *
FROM pec_mbbtmssgs
WHERE activity='bike'
AND DATE(CONCAT(y, '-', m, '-', d)) >= DATE(NOW())
更简单的方法是将日期存储在date
type列中,而不是三个单独的列中。您始终可以提取所需的特定信息(例如,您可以提取月份,即使您的值是2016-11-30
)。您对CONCAT()
的使用有点不恰当,因为数据库列应该用反勾号包装,或者根本不用反勾号,字符串/分隔符应该用单引号括起来“
您也可以通过执行DATE(NOW())
来获取当前日期,并与之进行比较。然后将DATE()
与CONCAT()的结果一起使用,结果如下
SELECT *
FROM pec_mbbtmssgs
WHERE activity='bike'
AND DATE(CONCAT(y, '-', m, '-', d)) >= DATE(NOW())
更简单的方法是将日期存储在date
type列中,而不是三个单独的列中。你总是可以提取你想要的特定信息(例如,你可以提取月份,即使你的值是2016-11-30
)。如果我理解正确:你是否有y
、m
和d
?此外,请看这里的引用CONCAT(`y`、'-'、'm'-'、'-'、'd')
,您正在对y
使用反勾号,但对m
和d
使用单引号(因此它被解释为字符串)。是的,y、m和dtried的单独列将所有引号更改为反勾号或单引号,这没有帮助。如果我理解正确:您对y
有单独的列吗,m
和d
?此外,看看这里引用的CONCAT(`y`、'-'、'm'、'-'、'd')
,你对y
使用反勾号,但对m
和d
使用单引号(因此它被解释为字符串)。是的,单独的y列,m和dtried将所有引用更改为反勾号或单引号,但没有帮助。尝试了这一次,但没有效果。我想我要做的是用y、m和d字段构建一个字符串,并将其与当前日期进行比较,我认为当前日期也被格式化为字符串。因此,将一个字符串与另一个字符串进行比较。我不确定是否理解您的评论,但您是否使用了CURDATE()?请执行以下SQL语句。这可能会让你有所了解。这种比较应该有效。选择unix_时间戳(CONCAT(2016,'-',11,'-',30)),unix_时间戳(CURDATE())在发送时插入,但仍不工作。数据库中的y、m、d字段只是数字,而不是unixtimstamp中的数字。我试图用yyy-m-d格式将它们与日期('Y-n-j')进行比较,日期('Y-n-j')的格式相同,n和j数字上没有前导零。尝试比较两个苹果,但不起作用。我分别运行两个日期(“Y-n-j”)和CONCAT(Y',-',m',-',d),它们都以YYYY,n-j格式返回日期。我只是无法让它们在查询中相互比较并生成所需的结果。尝试了这个,但没有效果。我想我要做的是用y、m和d字段构建一个字符串,并将其与当前日期进行比较,我认为当前日期也被格式化为字符串。因此,将一个字符串与另一个字符串进行比较。我不确定是否理解您的评论,但您是否使用了CURDATE()?请执行以下SQL语句。这可能会让你有所了解。这种比较应该有效。选择unix_时间戳(CONCAT(2016,'-',11,'-',30)),unix_时间戳(CURDATE())在发送时插入,但仍不工作。数据库中的y、m、d字段只是数字,而不是unixtimstamp中的数字。我试图用yyy-m-d格式将它们与日期('Y-n-j')进行比较,日期('Y-n-j')的格式相同,n和j数字上没有前导零。尝试比较两个苹果,但不起作用。我分别运行两个日期(“Y-n-j”)和CONCAT(Y',-',m',-',d),它们都以YYYY,n-j格式返回日期。我只是无法让他们在查询中相互比较,并产生所需的结果。哎呀!真管用!我唯一的问题是,在我的数据库和DATENow函数中,今天的日期都有两个数字表示月份和日期。当月份变为1月份时,它仍然有效吗?或者Date(NOW()返回一个带前导零的值,表示一位数的月份或天数?这应该有效。您可以通过运行类似于SELECT Date('2016-01-01')=Date('2016-1-1')
)的命令来验证这一点,该命令应该返回true(MySQL中的1
)-因此,只要格式正确,是否有前导零无关紧要。很高兴能提供帮助!如果这个答案解决了您的问题,请:-)就像我说的,处理1DATE
列(yyy-mm-dd
)可能比处理3个单独的整数列更容易。如果您只需要月份,您可以选择日期格式('2016-11-30','%M')作为月份
,这将为您提供11
。您可以将2016-11-30
替换为DATE
类型列的名称。谢谢。我同意“1日期”列更有意义,但我使用的日历软件将y d m插入数据库中的3个不同字段。远远超出我目前的能力