PHP DateTime错误/文件上次修改

时间:2014-02-26 14:07:24

标签: php datetime

对于文件上传脚本(HTML5文件API / PHP从上传的块中创建文件)我需要将文件的最后修改日期转换为Mysql Datetime格式('Y-m-d H:i:s')。我的PHP代码中的部分如下所示:

// The last modified date is in a POST Request (jQuery AJAX)
$fileLastModified = new DateTime($_POST['fileLastModified']);
// Convert to UTC
$fileLastModified->setTimeZone(new DateTimeZone('UTC'));
// Change the format                    
$done = $fileLastModified->format('Y-m-d H:i:s');

在OSX 10.9(Mavericks)上一切正常,$_POST['fileLastModified']设置为类似

的字符串
  

2014年2月26日星期三13:42:22 GMT + 0100(CET)

在PC上(Windows 8)$_POST['fileLastModified']设置为

  

2014年2月26日星期三13:42:22 GMT + 0100(欧洲标准时间)

和PHP给了我一个很长的错误信息(上面的代码)

  消息'DateTime :: _ construct()的

'异常':无法解析   时间字符串(Wed Feb 26 2014 13:42:22 GMT + 0100(W. Europe Standard   时间))在位置38(E):双时区规范'in   /FILEPATH/upload.php:57\nStack trace:\ n#0 /FILEPATH/upload.php(57):   DateTime-> _construct('Wed Feb 26 2014 ...')

那么......为什么DateTime无法解析PC上的字符串,而它在OSX上完美运行?

1 个答案:

答案 0 :(得分:1)

DateTime::createFromFormat()应该允许您有选择地选择您想要使用的日期部分:

$date = str_replace('+', ' +', 'Wed Feb 26 2014 13:42:22 GMT +0100 (W. Europe Standard Time)');
$fileLastModified = DateTime::createFromFormat('D M d Y H:i:s e O+', $date);
$fileLastModified->setTimeZone(new DateTimeZone('UTC'));                
echo $fileLastModified->format('Y-m-d H:i:s');

See it in action

我必须在+字符前加一个空格,因为DateTime因某种原因解析了该字符串。