2017-02-20 91 views
1

我已經存在微秒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(或日期),用微秒回微秒?

回答

0

您需要將數據庫字段類型更改爲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 –

0

如果使用微秒創建對象,則可以使用$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