Unixエポック以降のミリ秒数として表される、日付に等しい文字列があります。
D-m-Yに出力しようとしています。
私が与えられた文字列は「1227643821310」であり、結果は2-12-2008に等しくなければならないと言われていますが、25-11-2008
私のコードは次のとおりです。
$mil = 1227643821310;
$seconds = $mil / 1000;
echo date("d-m-Y", $seconds);
これがなぜなのかについてのアイデアはありますか?
あなたはすでに正しくやっています。1227643821は単に2008年2月12日ではなく、実際には2008年11月25日です。
次の例のようにH:i:sを追加しました。
$mil = 1227643821310;
$seconds = $mil / 1000;
echo date("d/m/Y H:i:s", $seconds);
ジェフ、タイムスタンプを扱うときに理解する重要なこと:タイムゾーンではなく、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日以降の日付を表すことができる場所は世界中にありません。
元の値の作成者は、タイムゾーンを扱うときに何らかの形で間違えている可能性があります。または単純に間違えた。たとえば、値を計算するときに、あるステップでミリ秒ではなく秒を追加しました。
私が考えることができる唯一のものは、日付に変換する前に小数部分を四捨五入してみてください。結果が変わらない場合、結果は正しいです。