PHP strtotime():转换后显示'1970-01-01'的日期

use*_*672 1 php mysql datetime

我正在从excel表读取数据并插入MySQL表.在这个过程中,我使用PHP方法将时间戳(字符串)转换为datetime strtotime().

$timestamp = date('Y-m-d H:i:sa',strtotime(trim($value->Time)));
Run Code Online (Sandbox Code Playgroud)

在某些情况下,这是失败的.

例:

 echo date('Y-m-d H:i:s',strtotime('04-13-2018 0:00:53'));

 echo date('Y-m-d H:i:s',strtotime('04-12-2018 0:00:53'));
Run Code Online (Sandbox Code Playgroud)

输出:

1970-01-01 00:00:00

2018-12-04 00:00:53
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我如何解决这个问题?

失败的示例字符串:

04-12-2018 0:00:53
04-12-2018 0:01:53
04-12-2018 0:02:53
04-12-2018 0:03:53
04-12-2018 0:04:53
04-12-2018 0:05:53
04-12-2018 0:06:53
04-12-2018 0:07:53
04-12-2018 0:08:54
04-12-2018 0:09:54
04-12-2018 0:10:53
04-12-2018 0:11:53
04-12-2018 0:12:53
04-12-2018 0:13:53
04-12-2018 0:14:53
04-12-2018 0:15:53
04-12-2018 0:16:53
04-12-2018 0:17:53
04-12-2018 0:18:53
04-12-2018 0:19:54
04-12-2018 0:20:54
04-12-2018 0:21:54
04-12-2018 0:22:53
04-12-2018 0:23:54
04-12-2018 0:24:53
04-12-2018 0:25:54
Run Code Online (Sandbox Code Playgroud)

Sys*_*all 7

您的格式不是解析器理解格式.

在你的情况下13不是一个"月".所以解析器到目前为止还不理解.

你应该使用DateTime::createFromFormat():

$date = DateTime::createFromFormat('m-d-Y H:i:s','04-13-2018 0:00:53');
echo $date->format('Y-m-d H:i:s');
Run Code Online (Sandbox Code Playgroud)

输出:

2018-04-13 00:00:53
Run Code Online (Sandbox Code Playgroud)

请注意,格式也可以是:'m-d-Y G:i:s'with Gfor "24小时格式的一小时没有前导零".