php微秒转换为DateTime并返回

问题描述:

我已经存在微秒timestamp = 1484923604957,我想创建DateTime对象或只是日期,然后在表db中设置列created_at - datetime。我不想在数据库中更改类型字段。现在,我转换成日期这样php微秒转换为DateTime并返回

 $seconds = $mil/1000; 
    return date("Y-m-d H:i:s", $seconds); 

,并在DB有2017-01-20 14:46:44

,然后当得到有日期没有微秒

created_at = "2016-12-29 14:42:05" 

我创建的DateTime

 $dateTimeClass = date_create_from_format('Y-m-d H:i:s', $date); 
    return $dateTimeClass; 

,并在回应

$dateTimeClass->getTimestamp()*1000 

这是最后一个微秒

如何纠正转换为DatTime(或日期),用微秒回微秒?

您需要将数据库字段类型更改为created_at - DATETIME更改为DATETIME(6)微秒。没有这一点,你不会得到精确的时间在微秒,因为它不会被存储在数据库中。

+0

我有type''created_at' datetime NOT NULL,'它是什么类型DATETIME(6)以及如何更改? –

+0

@ shuba.ivan参考这里http://stackoverflow.com/questions/26299149/timestamp-with-a-millisecond-precision-how-to-save-them-in-mysql –

如果使用微秒创建对象,则可以使用$dateTime->format('u')将对象转换为微秒。请参阅the documentation for date

微秒(在PHP 5.2.2中添加)。请注意,date()将始终生成000000,因为它需要一个整数参数,而DateTime :: format()确实支持微秒,如果DateTime是以微秒创建的。

+0

在db'2017-01-20 14 :46:44.000000'然后'$ dateTime-> format('u')=>结果= 000000'但需要像'timestamp = 1484923604957' –

+0

如果你想要一个纪元时间戳,那么你可以使用'format('U')' – nvisser