php strotime():转换后显示“1970-01-01”的日期

flmtquvp  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(411)

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

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

这在某些情况下是失败的。
例子:

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'));

输出:

1970-01-01 00:00:00

2018-12-04 00:00:53

有人能帮我解决这个问题吗?
失败的字符串示例:

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
disho6za

disho6za1#

您的格式不是解析器能够理解的格式。
对你来说 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');

输出:

2018-04-13 00:00:53

请注意,格式也可以是: 'm-d-Y G:i:s'G 对于“不带前导零的小时的24小时格式”。

gcuhipw9

gcuhipw92#

补充已经回答的问题。
得到1970的原因是,如果strotime不能解析日期,它将返回false。
0(假)unix时间是1970年。

bwleehnv

bwleehnv3#

字符串格式错误 strtotime() 以及(我不记得技术术语)“美国格式”值:

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/13/2018 0:00:53'));

https://3v4l.org/qnsru
给予:

1970-01-01 01:00:00
2018-04-13 00:00:53

基本上,你给了 strtotime() “欧洲日期时间”值。这是最重要的 - 这表示第一部分是日,而不是月。
这是很久以前的事了。

相关问题