【问题标题】:Why does DateTime::createFromFormat() method turn out to be undefined?为什么 DateTime::createFromFormat() 方法结果是未定义的?
【发布时间】:2015-11-15 13:46:54
【问题描述】:

这是 PHP 代码。

public function storeUser($name, $email, $password, $str_birthday) {
    $uuid = uniqid('', true);
    $hash = $this->hashSSHA($password);
    $encrypted_password = $hash["encrypted_password"]; // encrypted password
    $salt = $hash["salt"]; // salt
    $dob = DateTime::createFromFormat('m/d/Y', $str_birthday)->format('Y-m-d');

    $result = mysqli_query($this->db->connect(), "INSERT INTO users(unique_id, name, email, encrypted_password, birthday, salt, created_at) VALUES('$uuid', '$name', '$email', '$encrypted_password', '$dob', '$salt', NOW())");

    // check for successful store
    if ($result) {

        // get user details
        $result = mysqli_query($this->db->connect(), "SELECT * FROM users WHERE email = '$email'");

        // return user details
        return mysqli_fetch_array($result);

    } else {
        return false;
    }
}

在浏览器上运行该命令后,显示以下部分未定义。

$dob = DateTime::createFromFormat('m/d/Y', $str_birthday)->format('Y-m-d');

但是我已经找到了很多使用该方法更改日期格式以将其存储到 MySQL 数据库中的建议。

【问题讨论】:

  • 您确定始终提供$str_birthday 吗?请注意文档中提到Returns a new DateTime instance or FALSE on failure(因此在这些情况下您不能调用->format('Y-m-d'))。
  • 这里也有关于 PHP 版本的好评论,但消失了。请注意,DateTime::createFromFormat 适用于 PHP >= 5.3.0。
  • @jso DateTime::createFromFormat 可用,但接下来是; ->format() 函数似乎未定义。
  • @jso 例如,当我开始在 Eclipse 中输入 DateTime::createFromFormat 时,建议使用它,但 ->format() 不可用,说“没有默认建议”。
  • 只是 Eclipse 中或运行代码时的问题?请注意,->format() 并不总是可用,因为它取决于输入:DateTime::createFromFormat('m/d/Y', '01/01/2015') 将返回 DateTime,但 DateTime::createFromFormat('m/d/Y', '01/01/xy') 将返回 false,所以显然你不能使用 ->format()

标签: php


【解决方案1】:

更简单的方法来实现这一点:

$dob = date("Y-m-d", strtotime($str_birthday));

【讨论】:

  • 在没有解释的情况下推荐较旧的和不太通用的解决方案不是一个好主意。另外,你没有回答问题。
猜你喜欢
  • 1970-01-01
  • 2013-02-26
  • 1970-01-01
  • 1970-01-01
  • 2018-05-01
  • 2017-11-01
  • 2015-04-19
  • 1970-01-01
  • 2019-08-14
相关资源
最近更新 更多