php检查mysql日期时出错

标签 php mysql date casting

警告:我是 php 新手

我正在从 mysql 格式的表单中读取 2 个日期(即 YYYY-MM-DD),并尝试对它们进行错误检查以确保有效性,并且其中一个日期小于另一个日期

if(!empty($day1) && !empty($day2)){
 $sndate=array();
 $sndate = explode('-',$day1);
 $sndtnum = implode($sndate);
 $sndtnum = (int) $sndtnum;

 $unsndate=array();
 $unsndate = explode('-',$day2);
 $unsndtnum = implode($unsndate);
 $unsndtnum = (int) $unsndtnum;
  if (!checkdate($sndate[1],$sndate[2],sndate[0]) || !checkdate($unsndate[1],$unsndate[2],unsndate[0]) || $unsndtnum<$sndtnum)
  { $error=True; $errtext .="Date field is filled in wrong \n";
  }else {$error=False;}
}

这似乎不起作用。我很确定这是因为检查日期,但我不确定内爆/类型转换是否也存在问题。

关于如何解决这个问题有什么想法吗?

最佳答案

除了 sndate[0]unsndate[0] 变量缺少美元符号之外,如果邪恶用户输入非数字字符,您的检查实际上将不起作用在 $day1 中(例如 2015-09abc-01 将被视为小于 2015-05-01)。

以下方法通过将日期从已知格式转换为 DateTime 对象然后再转换回来来验证日期,确保两个格式化日期相等:

$f = 'Y-m-d';
$ok1 = ($d1 = DateTime::createFromFormat($f, $day1)) && $d1->format($f) == $day1;
$ok2 = ($d2 = DateTime::createFromFormat($f, $day2)) && $d2->format($f) == $day2;

if ($ok1 && $ok2 && $d1 <= $d2) {
    // Ok
} else {
    // Error
}

希望这有帮助:)

关于php检查mysql日期时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28751835/

相关文章:

php - 是否有 PHP 的统计库?

php - Magento - 如何将自定义 block 添加到结帐成功页面

php - 将 PHP 文件链接到数据库

php - 使用 php 或 MySql 将时间戳转换为 DateTime

javascript - 带/不带 Moment.js 的日期格式

PHP不会显示 "0"值字符串?

php - 使用 preg_replace 替换字符,除非前面有转义字符

php - 谷歌可视化 API php ajax

java - 如何在 Java 中验证日期?

java - 如何在某一天单击鼠标时选择 jCalender 日期