2016-01-20 5 views
7

私はこの問題を解決しようと3日間過ごしました。 私はMongoDB PHPライブラリを使用していますが、PHPドキュメントの例を使って有効な日付にタイムスタンプを変換しようとしていますが、常に1970-01-17を返しています。PHPとmongodbで現在までのタイムスタンプ

コードは次のとおりです。

$utcdatetime = new MongoDB\BSON\UTCDateTime(1453939200); 

    $datetime = $utcdatetime->toDateTime(); 

    var_dump($datetime); 

答えて

11

documentationは、コンストラクタはミリ秒単位のタイムスタンプを表す整数パラメータに取り、あなたがそれ故に無効な日付結果を秒単位でタイムスタンプを提供していると述べています。

掛け千によって値はミリ秒単位のタイムスタンプは、このように変換され、有効なDateTimeオブジェクトを返す取得するには:タイムスタンプで、その後値を変換するために あなたが最初に持っている。このためにお探しの方へ

$timestamp = 1453939200 * 1000; 
$utcdatetime = new MongoDB\BSON\UTCDateTime($timestamp); 

$datetime = $utcdatetime->toDateTime(); 

var_dump($datetime); 
+0

chridamこんにちは、答えに感謝しかし、今私は、日付として1969年12月8日午前5時14分47秒を取得しています。どんな考え? –

+2

タイムスタンプ(ミリ秒単位)を扱えない32ビットバージョンのPHPを実行しているようです。これは、64ビットPHPを実行するか、このMongoオブジェクトをまったく使用しないかのほかに、明らかにDateTimeが必要なため、これを回避する方法はありません。 '$ foo = new DateTime(); $ foo-> setTimestamp(1453939200); var_dump($ foo); ' – Sammitch

+0

ここに@Sammitchと同意するでしょう – chridam

0

をあなたは有効なISODateでそれを変換することができます。 例:

$utcdatetime = new MongoDB\BSON\UTCDateTime(strtotime($date)); 
    $date2 = new MongoDB\BSON\Timestamp(1, date($utcdatetime)); 
+1

UTCDateTimeはパラメータとしてミリ秒ベースのタイムスタンプをとり、strtotimeは秒ベースのタイムスタンプを返します。 http://php.net/manual/en/class.mongodb-bson-utcdatetime.php – Weboide

関連する問題