对于文件上传脚本(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上完美运行?
答案 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');
我必须在+
字符前加一个空格,因为DateTime因某种原因解析了该字符串。