【问题标题】:DateTime createFromFormat Issue日期时间 createFromFormat 问题
【发布时间】:2014-12-24 06:04:49
【问题描述】:

我正在尝试进行日期时间格式转换,但遇到了问题。我指定的格式似乎不适用于我给出的输入。我以前从未使用过此功能,因此不胜感激。

我正在尝试进行以下转换:

$date = DateTime::createFromFormat('l, F j Y g.ia','Thursday, April 2 2014 7.20pm');
$date = $date->format('d/m/Y');    

我收到“致命错误:在第 76 行对非对象调用成员函数 format()”,我猜这意味着 createFromFormat 函数失败。

有什么想法吗?

【问题讨论】:

  • 你用的是什么 PHP 版本?

标签: php datetime


【解决方案1】:

DateTime::createFromFormatdate_create_from_format 函数仅在 PHP 5 >= 5.3.0 中受支持。

因此,要使其正常工作,您需要:

  • 将您的 PHP 版本升级到 5.3.0 或更高版本

  • 尝试使用

    $date = date('d/m/Y',strtotime('Thursday, April 2 2014 7.20pm'));
    echo $date;
    

注意:php 版本 5.3.0 - 5.3.8 显示日期格式为 02/04/2014,而 php 版本 5.3.9 - 5.6.3 显示日期格式为 03/04/2014。这是因为 php 版本 5.3.9 - 5.6.3 中的 DateTime 似乎比 php 版本 5.3.0 - 5.3.8 更严格。我能注意到的是,如果不与工作日同步,我们尝试转换的那一天。意味着,4 月 2 日不是星期四,它实际上是星期三,因此它会强制将星期四的日期与您在日期中指定的日期相近。就像我们将尝试转换日期“2014 年 4 月 4 日星期四 7.20pm”一样,我们最终将显示 4 月 10 日,因为星期四正好是这个日期。

【讨论】:

  • 我使用的是 PHP v5.4.4。该函数正在运行,但它似乎不喜欢我给出的日期格式的表达。
  • 它对我有用,你也可以在这里查看:3v4l.org/g4St1。您可以做一件事,如果您可以使用 DateTime::getLastErrors() 了解并分享最后一个错误,并将其放在您的 format() 函数之上,我们可以有更多的想法。此外,我可以在检查时看到一个奇怪的结果,对于 php 版本 5.3.0 - 5.3.8,它显示的日期格式为 02/04/2014,而对于 php 版本 5.3.9 - 5.6.3,它显示格式化日期为 03/04/2014。
  • 干杯拉克什。它现在似乎正在工作。我改变的只是 php.ini 中的时区?无论如何 - 结果日期似乎不正确一天。这是时区问题吗?我在 php.ini 中设置了默认值。有什么建议吗?
  • 我可以看到与我在 prev cmets 中告诉您的相同 - “此外,我可以在检查时看到一个奇怪的结果,其中 php 版本 5.3.0 - 5.3.8 它显示日期格式化为 02/04/2014 而对于 php 版本 5.3.9 - 5.6.3 它显示格式化日期为 03/04/2014"
  • Seonix,我认为 php 版本 5.3.9 - 5.6.3 中的 DateTime 似乎比 php 版本 5.3.0 - 5.3.8 更严格。我可以挖掘的是您尝试转换的日期与工作日不同步。意味着,4 月 2 日不是星期四,因此它会将星期四的日期强制设置为您在日期中指定的日期附近。例如,如果您尝试将日期转换为“2014 年 4 月 4 日星期四 7.20pm”,您最终将显示 4 月 10 日,因为星期四正好是这个日期。
【解决方案2】:

抱歉回复晚了。

拉克什是对的。我输入的日期无效,因此较新版本的 PHP 比旧版本更不宽容。

我与 PHP 的版本进行了并排比较。当前的 PHP 版本似乎抛出了一个错误。旧版本似乎会尽最大努力更正日期。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-28
    • 2014-09-04
    • 2019-11-25
    • 2011-11-21
    相关资源
    最近更新 更多