【问题标题】:DateTime::createFromFormat - php format issueDateTime::createFromFormat - php 格式问题
【发布时间】:2010-08-12 11:54:37
【问题描述】:

PHP - DateTime::createFromFormat — 返回根据指定格式格式化的新 DateTime 对象

这行得通:

$var = DateTime::createFromFormat('Ymd','20100809')->getTimestamp();

但这失败了

在非对象上调用成员函数 getTimestamp()

$var = DateTime::createFromFormat('Y/m/d H:M:S','2010/08/09 07:47:00')->getTimestamp();

【问题讨论】:

    标签: php format timestamp


    【解决方案1】:

    在本例中,M:S 部分是错误的。它必须是i:s。请参阅manual on date()

    但是,这突出了一个更深层次的概念问题:任何一个参数中的错误输入都会导致致命错误,这对于生产中的应用程序来说是一种不良行为。

    来自createFromFormat上的手册:

    返回一个新的 DateTime 实例,失败时返回 FALSE。

    当调用未能根据您的输入构建日期时,不会返回任何对象。

    为避免输入不正确时出现致命错误,您将(遗憾的是,这会破坏良好的链接)必须首先检查是否成功:

     $var = DateTime::createFromFormat('Y/m/d H:M:S','2010/08/09 07:47:00');
    
     if ($var instanceof DateTime)
      echo $var->getTimestamp();
    

    【讨论】:

    • 不是m:s; i:sm 是为了飞蛾。
    【解决方案2】:

    应该是

    DateTime::createFromFormat('Y/m/d H:i:s','2010/08/09 07:47:00')->getTimestamp()
                                        ^ ^
    

    有关使用的格式,请参阅date

    在这种情况下,您也可以使用strtotime。这将给出相同的结果:

    strtotime('2010/08/09 07:47:00')
    

    另一种方式:

    date_create('2010/08/09 07:47:00')->getTimestamp()
    

    请注意,DateTime::createFromFormat 出错时会返回 FALSE。您可以使用DateTime::getLastErrors() 获取错误:

    <?php
    $d = DateTime::createFromFormat('Y/m/d H:M:S','2010/08/09 07:47:00');
    var_dump($d);
    var_dump(DateTime::getLastErrors());
    

    会给:

    布尔(假) 数组(4){ ["warning_count"]=> 整数(0) [“警告”]=> 数组(0){ } ["error_count"]=> 整数(3) [“错误”]=> 数组(1){ [14]=> string(13) "尾随数据" } }

    【讨论】:

    • 感谢 DateTime::getLastErrors(),真的很有用..
    【解决方案3】:

    使用 s 代替 Sm 代替 M

    • s - 秒,带前导零
    • S - 英文序数后缀 一个月中的某一天,2 个字符,如 st、nd、rd 或 th

    • m - a 的数字表示
      月份,前导零
    • M - a 的简短文本表示 月,三个字母,如 Jan 到 十二月

    【讨论】:

      【解决方案4】:

      H:M:S M 是月份的简称,S 是月份的序数 (st, nd, rd,th) 日 试试 H:i:s

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-08-25
        • 2017-11-01
        • 2012-04-24
        • 2011-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多