4

2 つの UNIX タイムスタンプがあり、アジア太平洋/オークランドのタイムゾーンにいます (GMT+12、夏時間 = GMT+13)

2 つのタイムスタンプ間の日数間隔を計算したいのですが、1 つは夏時間内にあり、もう 1 つはそうではありません。

私の例の日付は次のとおりです。

7 Feb 2009 (1233925200)(21 日を21 September 2010 (1284985360)含まない) 591 日を参照してください: http://www.timeanddate.com/date/durationresult.html?d1=7&m1=2&y1=2009&d2=21&m2=9&y2=2010

計算してみましょう。これが私のタイムスタンプです (両方ともオークランドの 00:00 時間に基づいています)。

1284985360-1233925200 = 51060160
51060160 / 86400 = 590.974

そうそう、591が必要です。「切り上げ」ソリューションを使用したくありません

strtotime のような信頼できる方法はありますか?

編集:明確にする必要があります。STRTOTIMEを使用してこれらのタイムスタンプを取得しています。UTCだと思いました

EDIT2:私は問題を見つけたと思います。私の終了日は9月21日でしたが、実際にはtime()を使用して終了日を取得していました.time()は間違ったタイムスタンプを返していました.time()をstrtotime(date('d M Y')) で、正しいタイムスタンプが返されました! エウレカ591日

4

3 に答える 3

5

差を計算する前に、両方のタイムスタンプの丸日数を計算します。

floor(1284985360 / 86400) - floor(1233925200 / 86400)

結果は常に整数です。

strtotimeこれらのタイムスタンプを取得するために使用して00:00:00+0000いるため、常に 86400 の倍数を取得する時間を指定します。

strtotime($str.' 00:00:00+0000')
于 2010-09-20T13:54:24.780 に答える
2

正しい Unix (POSIX) タイムスタンプは UTC であるため、既に間違っている値から始めています。API は通常、タイムスタンプが UTC であると想定するため、困難な戦いに直面しています。これを修正すると、単純な除算で実際に正しい結果が得られます。

于 2010-09-20T13:29:38.020 に答える
0

86400 で割ることは確実で簡単です。私は特別な機能を知りませんし、それらが存在する理由もわかりません。

于 2010-09-20T13:07:02.737 に答える