2014-02-26 68 views
0

对于文件上传脚本(HTML5 File API/PHP从上传的块创建文件)我需要将文件的最后修改日期转换为Mysql日期时间格式('Ymd H :I:S')。在我的PHP代码的部分看起来像这样: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(小牛)一切正常,并$_POST['fileLastModified']被设置为一个字符串像

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

在PC(Windows 8中)$_POST['fileLastModified']被设置成类似

Wed Feb 26 2014 13:42:22 GMT + 0100(W.欧洲标准时间)

和PHP是给我一个很长的上述错误消息(代码)

“异常”与消息“日期时间:: _ 结构():解析失败 时间字符串(Wed Feb 26 2014 13:42:22 GMT + 0100(W. Europe Standard Time))at position 38(E):Double timezone specification'in /FILEPATH/upload.php:57\nStack trace:\ n #0 /FILEPATH/upload.php(57): DateTime-> _construct('Wed Feb 26 2014 ...')

因此...为什么DateTime无法解析PC上的字符串,而它在OSX上完美工作?

+2

'W.欧洲标准时间“无效。 –

+0

@JohnConde谢谢,任何建议如何删除只有该部分?所以它仍然适用于每个文件修改日期? – Daniel

+0

您是否尝试过使用http://www.php.net/manual/en/function.strptime.php并指定预期日期格式,因为该功能会忽略所有未知的元素? –

回答

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的解析之前,把一个空间字符串由于某种原因。

+0

谢谢,我想你的代码,并添加'$ fileLastModified->格式( 'Y-M-d H:I:S');'按http://www.php.net/manual/de/datetime.createfromformat.php。 但似乎并不喜欢这种情况:“调用成员函数格式()在一个非对象...” – Daniel

+0

让我把它扔在小提琴里看看会发生什么 –

+1

@demrks It很棘手,但找到了问题。它现在有效。 –