DateTime :: createFromFormat无法按预期工作

时间:2015-09-11 20:51:45

标签: php datetime

运行PHP 5.3.28

我有一个特定的日期作为一个strtotime窒息的字符串返回,所以我想尝试DateTime :: createFromFormat(),但尽管尽最大努力得到错误。

<?php

$freshdate = '09/07/2015 (Mon)';
$date = DateTime::createFromFormat("m/d/Y (D)", $freshdate);
if (!$date) {
  var_dump('error', DateTime::getLastErrors());
}

结果是:

array (size=4)
  'warning_count' => int 0
  'warnings' => array (size=0)
  'error_count' => int 2
  'errors' => array (size=2)
      12 => string 'A textual day could not be found' (length=32)
      16 => string 'Data missing' (length=12)

4 个答案:

答案 0 :(得分:4)

这是PHP#65554中的错误:

  当格式为D或l后跟分隔符时,

createFromFormat失败   不是空格或逗号。

如何解决?更改格式或升级PHP版本。

答案 1 :(得分:3)

来自5.4.20的更改日志: - 修正了bug #65554(当工作日名称后跟一些分隔符时,createFromFormat中断了)

所以问题是在日期名称

之后追踪)

您可以通过修剪尾随)

来处理它
$freshdate = '09/07/2015 (Mon)';
$date = DateTime::createFromFormat("m/d/Y (D", rtrim($freshdate, ')'));
if (!$date) {
  var_dump('error', DateTime::getLastErrors());
}

答案 2 :(得分:2)

使用此< - strong>

<?php

$freshdate = '09/07/2015 (Mon)';
$date = DateTime::createFromFormat("m/d/Y (D)", $freshdate);
echo $date->format('m/d/Y (D)');

答案 3 :(得分:0)

这应该有效,将其转换为unix时间戳:

$freshdate = explode('/', '09/07/2015 (Mon)');
$year = explode(' ', $freshdate[2]);
$unix_date = mktime(0,0,0,$freshdate[0],$freshdate[1],$year[0]);

可能不是最佳答案,但肯定是答案:)