我有一个日期验证器代码段,它应该验证任何未来的日期。出于调试目的,我希望它在明天或大约3个小时后到期。截至撰写本文时,明天是12月18日。格林威治标准时间10月17日晚10点40分它将它标记为过去。日期输入时有3个帖子变量:日,月,年并连接,附加“01:01:59”,并作为时间戳插入表格,在表格中通过脚本进行预先检查以查看项目是否已过期。以下代码不会验证距离2天以内的任何日期。我无法弄清楚原因。
代码:
if(check_post('day')&&check_post('month')&&check_post('year'))
{
//die("day: ".$_POST['day']." month: ".$_POST['month']." year: ".$_POST['year']);
if(!check_post('day',"Select Day")&&!check_post('month',"Select Month")&&!check_post('year',"Select Year"))
{
$days = array("31", "28", "31", "30", "31", "30", "31", "31", "30", "31", "30", "31");
$today = explode("-",date("d-m-Y"));
if(checkdate($_POST['month'],$_POST['day'],$_POST['year']))
{
$c_y = ($_POST['year']==$today[2]);
$c_m = ($_POST['month']==$today[1]);
$p_d = ($today[0]>$_POST['day']);
$p_m = ($today[1]>$_POST['month']);
if(!($c_y&&(($c_m&&$p_d)||$p_m)))
{
$_POST['date']=strval($_POST['year'])."-".(($_POST['month']>9)?strval($_POST['month']):"0".strval($_POST['month']))."-".(($_POST['day']>9)?strval($_POST['day']):"0".strval($_POST['day']));
$_POST['date'] .= " 01:01:59";
//$_POST['date'] = mktime(0,0,0,$_POST['month'],$_POST['day'],$_POST['year']);
//die($_POST['date']);
}
else
{
add_error("Date must be current");
}
}
else
{
add_error("Invalid expiration date");
}
}
else
{
add_error("Pick an expiration date");
}
}
else
{
add_error("Date not set");
}
没有一些功能可以帮我这么做吗?
答案 0 :(得分:2)
简单的字符串比较将:
$today = date("Y-m-d");
$date = $_POST['year'] . '-' .
str_pad($_POST['month'], '0', 2, STR_PAD_LEFT} . '-' .
str_pad($_POST['day'], '0', 2, STR_PAD_LEFT);
if ($date > $today) {
// future date
} else {
// something else
}
或者:
if (strtotime("{$_POST['year']}-{$_POST['month']}-{$_POST['day']}") > time()) {
// future date
}
这不完全相同,因为time()
也有日期和时间组件,但它也应该正常工作。