【问题标题】:how can I check if a variable type is DateTime如何检查变量类型是否为 DateTime
【发布时间】:2013-10-16 06:38:13
【问题描述】:

请问如何检查一个变量是否是 php 上的日期时间类型? 这个我试过了,好像不行。

public function setRegistrationDate ($registrationDate) {

   if (!is_date($registrationDate, "dd/mm/yyyy hh:mm:ss")) {
       trigger_error('registrationDate != DateTime', E_USER_WARNING);
       return;
   }

   $this->_registrationDate = $registrationDate;
}

【问题讨论】:

    标签: php datetime


    【解决方案1】:

    我觉得这种方式比较简单:

    if (is_a($myVar, 'DateTime')) ...
    

    如果 $myVar 是 PHP DateTime 对象,则此表达式为真。

    从 PHP 5 开始,这可以进一步简化为:

    if ($myVar instanceof DateTime) ...
    

    【讨论】:

    • 这应该是正确的答案。由于其他答案已经过时,因此他们的方法已经过时。这是在 PHP 中验证类类型的正确方法。作为旁注,单引号应用作双引号会导致在这些情况下不需要的变量插值的额外步骤。
    • 你是对的。我只是将表达式从双引号更改为单引号。谢谢瑞恩。
    • 我认为最初的问题是如何确定给定字符串是否匹配特定格式,而不是特定 PHP 变量是否是特定类的实例。至于单引号和双引号,差异可以忽略不计,担心这些事情是一种微优化。如果您的代码很慢,那并不慢,因为您使用了双引号。 nikic.github.io/2012/01/09/…
    • OP 问题中的代码实际上是在尝试验证第 3 行的类型。至于微优化,这并不是重点。这是关于使用正确的字符串外壳。它可以忽略不计,但它是一个约定俗成的问题。不是慢的问题,而是正确练习的问题。见en.wikipedia.org/wiki/Coding_conventions
    • +1 瑞恩。使用正确的附件是有意义的,唯一不这样做的原因是懒惰(尽管公平地说,PHP 文档本身通常使用错误的附件)。此外,尽管它是一种“微”优化,但它在大型代码库中被无数倍地放大了。它不会制造或破坏任何东西,但不这样做是没有逻辑的。
    【解决方案2】:
    function validateDate($date, $format = 'Y-m-d H:i:s')
    {
        $d = DateTime::createFromFormat($format, $date);
        return $d && $d->format($format) == $date;
    }
    

    参考:

    【讨论】:

    • 1 分钟来验证这一点,当我们进行 OO php 编程时,将所有业务类重新组合在一个文件中是否是一种好习惯?
    【解决方案3】:

    最简单的答案是:strtotime()函数检查

    $date = strtotime($datevariable);
    

    如果是有效日期,则返回timestamp,否则返回FALSE

    【讨论】:

    • 感谢您的回复,请再问一个问题,当我们进行 OO php 编程时,将所有业务类重新组合在一个文件中是一种好习惯吗?
    • 理想情况下,我们应该将一个类放在一个文件中。
    • 不,我没有得到 false 我得到一个错误:警告:strtotime() 期望参数 1 是字符串,对象给出
    【解决方案4】:

    我会使用以下方法:

    public function setRegistrationDate ($registrationDate) {
      if(!($registrationDate instanceof DateTime)) {
        $registrationDate = date_create_from_format("dd/mm/yyyy hh:mm:ss", $registrationDate)
      }
    
      if(!($registrationDate instanceof DateTime)) {
        trigger_error('registrationDate is not a valid date', E_USER_WARNING);
        return false;
      }
    
      $this->_registrationDate = $registrationDate;
      return true
    }
    

    【讨论】:

    • 感谢您的回复,请再问一个问题,当我们进行 OO php 编程时,将所有业务类重新组合在一个文件中是一种好习惯吗?
    • 我通常倾向于将一个类放在一个文件中,遵循这个约定 (github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md) 以便更好地自动加载。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-15
    • 2011-08-25
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    相关资源
    最近更新 更多