DateTime :: createFromFormat - php格式问题

rog*_*ver 8 php format timestamp

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

这工作:

$var = DateTime::createFromFormat('Ymd','20100809')->getTimestamp();
Run Code Online (Sandbox Code Playgroud)

但这失败了

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

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

Pek*_*ica 15

在手头的情况下,该M:S部分是错误的.它需要i:s.请参阅日期手册().

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

从手册上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();
Run Code Online (Sandbox Code Playgroud)


Art*_*cto 9

它应该是

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

请参阅date使用的格式.

你也可以strtotime在这种情况下使用.这会得到相同的结果:

strtotime('2010/08/09 07:47:00')
Run Code Online (Sandbox Code Playgroud)

其他方式:

date_create('2010/08/09 07:47:00')->getTimestamp()
Run Code Online (Sandbox Code Playgroud)

请注意,错误时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());
Run Code Online (Sandbox Code Playgroud)

会给:

bool(false)
array(4) {
  ["warning_count"]=>
  int(0)
  ["warnings"]=>
  array(0) {
  }
  ["error_count"]=>
  int(3)
  ["errors"]=>
  array(1) {
    [14]=>
    string(13) "Trailing data"
  }
}