web-dev-qa-db-ja.com

php:ミリ秒を日付に変換する

Unixエポック以降のミリ秒数として表される、日付に等しい文字列があります。

D-m-Yに出力しようとしています。

私が与えられた文字列は「1227643821310」であり、結果は2-12-2008に等しくなければならないと言われていますが、25-11-2008

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

$mil = 1227643821310;
$seconds = $mil / 1000;
echo date("d-m-Y", $seconds);

これがなぜなのかについてのアイデアはありますか?

41
Jeff Winkworth

あなたはすでに正しくやっています。1227643821は単に2008年2月12日ではなく、実際には2008年11月25日です。

40

次の例のようにH:i:sを追加しました。

$mil = 1227643821310;
$seconds = $mil / 1000;
echo date("d/m/Y H:i:s", $seconds);
18
DanielOpaluwa

ジェフ、タイムスタンプを扱うときに理解する重要なこと:タイムゾーンではなく、0:00:00 01.01.1970 GMTから経過した時間を表します(あなたがGMTで自分自身でない限り、コース)。

1227643821は実際、GMT時間20:10:21 25.11.2008を表します。

これは世界のほとんどの地域で2008年11月25日ですが、モスクワの東のタイムゾーン(夏時間のため夏のモスクワのタイムゾーン自体)では既に11月26日です。最も「極端な」東のタイムゾーンはGMT + 14であるため、1227643821のタイムスタンプが26日以降の日付を表すことができる場所は世界中にありません。

元の値の作成者は、タイムゾーンを扱うときに何らかの形で間違えている可能性があります。または単純に間違えた。たとえば、値を計算するときに、あるステップでミリ秒ではなく秒を追加しました。

1
Ilya Birman

私が考えることができる唯一のものは、日付に変換する前に小数部分を四捨五入してみてください。結果が変わらない場合、結果は正しいです。

1
Scott