web-dev-qa-db-ja.com

PHP整数を日付に変換、strtotimeの逆

<?php
echo strtotime("2014-01-01 00:00:01")."<hr>";
// output is 1388516401
?>

それが逆になり得るのなら驚いた。つまり、convert 1388516401 to 2014-01-01 00:00:01。私が実際に知りたいのは、この変換の背後にあるロジックは何かということです。 phpが日付を特定の整数に変換する方法。

16
Wasim A.

はい、元に戻すことができます。あなたが試すことができます:

_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秒です。

40
Sabari

これを試してもらえますか、

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
10
Krish R

1388516401が2014-01-01に等しい理由を尋ねているのではないでしょうか...?

それには歴史的な理由があります。 1970-01-01 00:00:以降の経過時間のカウントを保持するtime_tと呼ばれる32ビット整数変数があります。その値はsecondsで時間を表します。つまり、2014-01-01 00:00:01time_t1388516401と等しくなります。

これは確かに別の興味深い事実につながります... 2038-01-19 03:14:07time_tは到達します2147485547 32ビットの数値。 John Titor and the Year 2038 problem ?について聞いたことがありますか? :D

4
Vereos

Time()関数は、現在とUNIXエポック1970年1月1日(00:00:00 GMT)の間の秒数を表示します。 strtotime()は、通常の日付形式をtime()形式に変換します。そのため、その日付の秒への表現は1388516401になります。

ソース: http://www.php.net/time

0
SpiderLinked