【问题标题】:Check PHP datetime stamp is correct?检查 PHP 日期时间戳是否正确?
【发布时间】:2011-12-27 16:39:58
【问题描述】:

有没有办法在 PHP 中检查日期时间戳是否正确?

我目前在 MySQL 中使用yyyy-mm-dd hh:mm:ss,并希望确保用户以匹配正确格式的形式提供日期/时间戳。

【问题讨论】:

标签: php mysql datetime


【解决方案1】:

[直到有人提供了好的(无错误),工作 checkdate() 示例] 我正在使用这个功能:

<?php 
function validateMysqlDate( $date ){ 
    if (preg_match("/^(\d{4})-(\d{2})-(\d{2}) ([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/", $date, $matches)) { 
        if (checkdate($matches[2], $matches[3], $matches[1])) { 
            return true; 
        } 
    } 
    return false; 
} 

// check it: 
  $a = validateMysqlDate('2012-12-09 09:04:00');
  $b = validateMysqlDate('20122-12-09 09:04:00');
  $c = validateMysqlDate('2012-12_09 09:04:00');
  $d = validateMysqlDate('');
  var_dump( $a );
  var_dump( $b );
  var_dump( $c );
  var_dump( $d ); 
?>

顺便说一句:checkdate() 会为 $b 返回 true,尽管它不是有效的 mysql 日期时间

【讨论】:

    【解决方案2】:

    您可以使用checkdate() 函数来检查日期的有效性。

    http://php.net/manual/en/function.checkdate.php

    您还可以将时间戳的所有部分传递给mktime(),如果返回 false 或 -1(取决于 PHP 版本),则日期无效

    http://www.php.net/manual/en/function.mktime.php

    【讨论】:

    • 反对票有什么用?模棱两可的问题的有效答案。 cmets 建议 OP 想要验证模式,而不是时间戳
    【解决方案3】:

    这是一个重复的问题。更多讨论和答案见MySQL: How to check if a string is a valid DATE, TIME or DATETIME

    【讨论】:

      【解决方案4】:

      尝试解析给定的字符串,然后检查它是否与您输入的日期相同,注意以下几点:

      $dt = DateTime::createFromFormat('Y-m-d H:i:s', '2011-01-32 12:00:00');
      echo $dt->format('Y-m-d H:i:s');
      // outputs 2011-02-01 12:00:00
      

      HTH。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-14
        相关资源
        最近更新 更多