【问题标题】:Date/time validation in PHPPHP中的日期/时间验证
【发布时间】:2013-09-06 18:00:15
【问题描述】:

我正在尝试从表单提交中获取日期/时间的单个值,并将它们解析为特定格式的日期。

如果验证因任何原因(例如 2 月 30 日、13 月等)失败,则结果应默认为当前时间。

if (isset($_POST['year'], $_POST['month'], $_POST['day'], $_POST['hour'], $_POST['minute']))
{
    $y = $_POST['year'];
    $m = $_POST['month'];
    $d = $_POST['day'];
    $h = $_POST['hour'];
    $i = $_POST['minute'];
    if (checkdate($m, $d, $y))
    {
        if ($h >= 0 && $h <= 23)
        {
            if ($i >= 0 && $i <= 59)
            {
                $str = $y.'-'.$m.'-'.$d.' '.$h.':'.$i.':00';
                $time = strtotime($str);
            }
            else $time = time();
        }
        else $time = time();
    }
    else $time = time();
}
else $time = time();

$datetime = date('D j M Y - H:i:s T', $time);
echo $datetime;

发生了两件事我不明白:

  • 如果缺少一个或多个日期值,则会出现有关 checkdate() 的错误...我不明白为什么验证不会在第一个 if() 时失败

    李>
  • 如果缺少一个或多个时间值,最终结果是 UNIX 纪元?!

【问题讨论】:

    标签: php validation date


    【解决方案1】:

    如果缺少一个或多个日期值,则会出现关于 checkdate() 的错误...我不明白为什么验证不会在第一个 if() 时失败

    设置和具有有效值是两件不同的事情。可以设置变量并包含空字符串或 null。检查以确保这些值实际上包含使用 empty() 的值。

    如果缺少一个或多个时间值,最终结果是 UNIX Epoch?!

    如果你传递 date() 一个无效的第二个参数(即一个有效的 unix 时间戳)它默认为纪元。

    【讨论】:

      【解决方案2】:

      执行checkdata前的空值检查

      <?php
      if(!empty($y) && !empty($m) && !empty($d) && !empty($h) && !empty($i))
      {
          if (checkdate($m, $d, $y))
          {
              if ($h >= 0 && $h <= 23)
              {
                  if ($i >= 0 && $i <= 59)
                  {
                      $str = $y.'-'.$m.'-'.$d.' '.$h.':'.$i.':00';
                      $time = strtotime($str);
                  }
                  else $time = time();
              }
              else $time = time();
          }
          else $time = time();
      }
      else $time = time();
      
      $datetime = date('D j M Y - H:i:s T', $time);
      echo $datetime;
      
      ?>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-28
        • 2015-02-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多