【问题标题】:DateTime::createFromFormat and incomplete datesDateTime::createFromFormat 和不完整的日期
【发布时间】:2016-02-22 23:29:00
【问题描述】:

我尝试使用createFromFormat 方法来格式化日期。问题是,当日期不完整(缺少秒、分钟或小时)时,会导致错误。有没有办法使这项工作即使对于不完整的日期,如下面的:

$my_sql_date = '2011-01-06 09:39';
$date2 = DateTime::createFromFormat('Y-m-d H:i:s', $my_sql_date);
print_r(DateTime::getLastErrors());

Array ( 
       [warning_count] => 0 
       [warnings] => Array ( ) 
       [error_count] => 1 
       [errors] => Array ( [16] => Data missing ) 
)

谢谢!

【问题讨论】:

  • 如果您使用的是createFromFormat(),那么您指定的格式必须与您传入的日期/时间字符串的格式相匹配......否则它会使create from format 变得漂亮无意义的方法名......解决方案是确保字符串与格式匹配,即使这意味着将':00' 附加到该字符串的末尾

标签: php dataformat


【解决方案1】:

您可以简单地将 DateTime 对象构造函数与您的格式一起使用。

$incompleteData = '2011-01-06 09:39';
$date2 = new DateTime($incompleteData);

以上方法都可以。

使用DateTime::createFromFormat。但是使用这种方法,您的不完整日期将始终必须符合指定的格式,因此上述方法是您最好的选择。

$incompleteData = '2011-01-06 09:39';
DateTime::createFromFormat('Y-m-d H:i', $incompleteData);

【讨论】:

  • 但是,如果日期更不完整,它将失败 - 例如:new DateTime('2011-01-06 09');
【解决方案2】:

你为什么不使用默认的__construct

$my_sql_date = '2011-01-06 09:39';
$date = new DateTime($my_sql_date);
print_r($date);

会产生

DateTime Object
(
    [date] => 2011-01-06 09:39:00.000000
    [timezone_type] => 3
    [timezone] => US/Pacific
)

你可以在之后格式化它:

echo $date->format('Y-m-d H:i:s');

这将导致

2011-01-06 09:39:00

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多