【问题标题】:Fatal error: Call to undefined method DateTime::createfromformat()致命错误:调用未定义的方法 DateTime::createfromformat()
【发布时间】:2012-01-05 20:56:43
【问题描述】:

你如何解决以下错误:

Fatal error: Call to undefined method DateTime::createfromformat()

错误发生在第 35 行。这是我的代码从第 31 行到第 45 行读取的内容

// check database for necessary updates

$update = mysql_query("SELECT * FROM rent WHERE colour='#3C0'");
while($row_update = mysql_fetch_array( $update )) {
    $datetime_lower   = DateTime::createFromFormat('d/m/Y', $min);
    $datetime_upper   = DateTime::createFromFormat('d/m/Y', $max);
    $datetime_compare = DateTime::createFromFormat('d/m/Y g:i a', $row_update['pDate']);
    if ($datetime_lower < $datetime_compare && $datetime_upper > $datetime_compare) {
        // date is between do nothing
    } else {
        // date is not between so update
        $update_result = mysql_query("UPDATE rent SET colour='#F0F0F0' WHERE id=" . $row_update['id'] . " && colour='#3C0'");
        mysql_close($update_result);
    }
}

我该如何解决这个问题?

【问题讨论】:

  • 通过删除该行。错误将消失。通常最好不要调用未定义的函数,否则总是会导致致命错误。也许您可以从您想要调用的 PHP 手册中链接该函数,以便清楚您尝试做什么?
  • 要么你在复制错误消息时出错,要么不是文件:createfromformat != createFromFormat
  • 代码似乎在我的本地服务器上运行良好
  • 您使用的是什么 PHP 版本? DateTime 在 5.3 及更高版本中可用。
  • 发现这个:date("j M Y", strtotime($myDate)) 在我无法手动升级我的版本并且等不及这些家伙的旧服务器上为我解决了这个问题这样做。

标签: php mysql


【解决方案1】:

DateTime::createFromFormat() 在 php 5.3 中引入。而且很可能你有一个更旧的。所以 - 安装 php >= 5.3,你会得到它的工作。

【讨论】:

  • PHP 版本 5.2.9 - 我在 uk2.net 服务器上运行它
  • 对于运行早期版本 PHP (PHP
  • @Sam: strtotime,不等同,但可以提供帮助
【解决方案2】:

您正在运行哪个版本的 PHP?根据PHPcreateDateFormat 的版本>= 5.3.0。

-- 编辑

看起来您的代码错误地使用了 DateTime,因为 createFromFormat 返回的是一个对象,而不是字符串,但您应该能够将 DateTime::createFromFormat() 调用与 date() 调用进行转置。

// PHP >= 5.3.0
$datetime_lower   = DateTime::createFromFormat('d/m/Y', $min);
$datetime_upper   = DateTime::createFromFormat('d/m/Y', $max);
$datetime_compare = DateTime::createFromFormat('d/m/Y g:i a', $row_update['pDate']);

// PHP < 5.3.0
$datetime_lower   = date('d/m/Y', $min);
$datetime_upper   = date('d/m/Y', $max);
$datetime_compare = date('d/m/Y g:i a', $row_update['pDate']);

但在我看来,如果您正在处理时间戳,您可以进行比较操作,而无需转换为特定格式。如果您正在处理的日期之一不是时间戳格式,您可以执行以下操作:

$timestamp = strtotime($yourFormattedDateTime);

// Now with everything in ints, you can do your conditional evals

【讨论】:

  • PHP 版本 5.2.9 - 我在 uk2.net 服务器上运行它
  • 不确定他们为什么运行这么旧的版本,您必须联系他们让他们升级,使用支持的函数调用来处理 5.2.9 的日期/时间,或者寻找新的主机谁更了解他们的软件。
  • 你能推荐任何支持的函数调用吗?
  • @methuselah:你能弄清楚吗?
猜你喜欢
  • 2013-02-26
  • 2017-01-13
  • 2023-03-21
  • 1970-01-01
  • 2015-01-28
  • 2015-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多