<?php
echo strtotime("2014-01-01 00:00:01")."<hr>";
// output is 1388516401
?>
それが逆になり得るのなら驚いた。つまり、convert 1388516401 to 2014-01-01 00:00:01
。私が実際に知りたいのは、この変換の背後にあるロジックは何かということです。 phpが日付を特定の整数に変換する方法。
はい、元に戻すことができます。あなたが試すことができます:
_date("Y-m-d H:i:s", 1388516401);
_
この日付から整数への変換の背後にあるロジックは、PHPの strtotime で説明されています。
この関数は、英語の日付形式を含む文字列が与えられることを想定しており、その形式を解析して、現在のタイムスタンプに関連するUnixタイムスタンプ(1970年1月1日00:00:00 UTCからの秒数)、または現在が指定されていない場合は現在の時刻。
たとえば、strtotime("1970-01-01 00:00:00")
は0を、strtotime("1970-01-01 00:00:01")
は1を返します。
これは、strtotime("2014-01-01 00:00:01")
を出力している場合、_1388516401
_を出力するため、日付_2014-01-01 00:00:01
_は1970年1月1日00:00:00 UTCから1,388,516,401秒です。
これを試してもらえますか、
echo date("Y-m-d H:i:s", 1388516401);
theGame で述べたように、
これは、時間の文字列値と、オプションで現在の時間の値(UNIXタイムスタンプ)を渡すことを意味します。返される値は、UNIXタイムスタンプである整数です。
echo strtotime("2014-01-01 00:00:01");
これは、値1388516401に戻ります。これは、日付2014-01-01のUNIXタイムスタンプです。これは、以下のようにdate()関数を使用して確認できます。
echo date('Y-m-d', 1198148400); // echos 2014-01-01
1388516401が2014-01-01に等しい理由を尋ねているのではないでしょうか...?
それには歴史的な理由があります。 1970-01-01 00:00:以降の経過時間のカウントを保持するtime_t
と呼ばれる32ビット整数変数があります。その値はsecondsで時間を表します。つまり、2014-01-01 00:00:01time_t
は1388516401と等しくなります。
これは確かに別の興味深い事実につながります... 2038-01-19 03:14:07time_t
は到達します2147485547 32ビットの数値。 John Titor and the Year 2038 problem ?について聞いたことがありますか? :D
Time()関数は、現在とUNIXエポック1970年1月1日(00:00:00 GMT)の間の秒数を表示します。 strtotime()は、通常の日付形式をtime()形式に変換します。そのため、その日付の秒への表現は1388516401になります。