3

タイムスタンプの補足質問-phpインクリメントタイムスタンプエラー

そのクラスDateTimeを受け入れると、元のクエリの解決策が提供される可能性がありますが、タイムスタンプには説明のつかない差異が残っています。このようなタイムスタンプの「調整」が他にあるかどうか、およびそれらがどのように発生するかについて、この差異を本当に理解したいと思います。

次の点を考慮してください。

/*
 * test time stamp variances
 */

$time_Stamp_1 = mktime(0,0,0,10,15,2012);echo "15/10/12: " . $time_Stamp_1;
$time_Stamp_2 = mktime(0,0,0,10,16,2012);echo "<br/>16/10/12: " . $time_Stamp_2 . "increment= " . ($time_Stamp_2 - $time_Stamp_1); 
$time_Stamp_3 = mktime(0,0,0,10,17,2012);echo "<br/>17/10/12: " . $time_Stamp_3 . "increment= " . ($time_Stamp_3 - $time_Stamp_2);
$time_Stamp_4 = mktime(0,0,0,10,18,2012);echo "<br/>18/10/12: " . $time_Stamp_4 . "increment= " . ($time_Stamp_4 - $time_Stamp_3);
$time_Stamp_5 = mktime(0,0,0,10,19,2012);echo "<br/>19/10/12: " . $time_Stamp_5 . "increment= " . ($time_Stamp_5 - $time_Stamp_4);
$time_Stamp_6 = mktime(0,0,0,10,20,2012);echo "<br/>20/10/12: " . $time_Stamp_6 . "increment= " . ($time_Stamp_6 - $time_Stamp_5);
$time_Stamp_7 = mktime(0,0,0,10,21,2012);echo "<br/>21/10/12: " . $time_Stamp_7 . "increment= " . ($time_Stamp_7 - $time_Stamp_6);
$time_Stamp_8 = mktime(0,0,0,10,22,2012);echo "<br/>22/10/12: " . $time_Stamp_8 . "increment= " . ($time_Stamp_8 - $time_Stamp_7);
$time_Stamp_9 = mktime(0,0,0,10,23,2012);echo "<br/>23/10/12: " . $time_Stamp_9 . "increment= " . ($time_Stamp_9 - $time_Stamp_8);
$time_Stamp_10 = mktime(0,0,0,10,24,2012);echo "<br/>24/10/12: " . $time_Stamp_10 . "increment= " . ($time_Stamp_10 - $time_Stamp_9);
$time_Stamp_11 = mktime(0,0,0,10,25,2012);echo "<br/>25/10/12: " . $time_Stamp_11 . "increment= " . ($time_Stamp_11 - $time_Stamp_10);
$time_Stamp_12 = mktime(0,0,0,10,26,2012);echo "<br/>26/10/12: " . $time_Stamp_12 . "increment= " . ($time_Stamp_12 - $time_Stamp_11);
$time_Stamp_13 = mktime(0,0,0,10,27,2012);echo "<br/>27/10/12: " . $time_Stamp_13 . "increment= " . ($time_Stamp_13 - $time_Stamp_12);
$time_Stamp_14 = mktime(0,0,0,10,28,2012);echo "<br/>28/10/12: " . $time_Stamp_14 . "increment= " . ($time_Stamp_14 - $time_Stamp_13);
$time_Stamp_15 = mktime(0,0,0,10,29,2012);echo "<br/>29/10/12: " . $time_Stamp_15 . "increment= " . ($time_Stamp_15 - $time_Stamp_14);

レポート:

15/10/12: 1350255600
16/10/12: 1350342000increment= 86400
17/10/12: 1350428400increment= 86400
18/10/12: 1350514800increment= 86400
19/10/12: 1350601200increment= 86400
20/10/12: 1350687600increment= 86400
21/10/12: 1350774000increment= 86400
22/10/12: 1350860400increment= 86400
23/10/12: 1350946800increment= 86400
24/10/12: 1351033200increment= 86400
25/10/12: 1351119600increment= 86400
26/10/12: 1351206000increment= 86400
27/10/12: 1351292400increment= 86400
28/10/12: 1351378800increment= 86400
29/10/12: 1351468800increment= 90000

したがって:

> 15/10/2012 1350255600 + 604800 does increment 1 week to 22/10/2012 ..
> 22/10/2012 1350860400 + 604800 does not increment 1 week to 29/10/2012
> because although this results in 1351465200 which should be 29/10/2012
> you can see from the above that it resolves to 28/10/2012 because for
> some unexplained reason an extra hour 3600sec has been added to the
> time stamp for 29/10/2012.

ドキュメントを読んだことから、mktimeはstrtotimeやDateTimeと同じくらい有効なタイムスタンプを作成する必要があるので知りたいです。

実際、クラスDateTimeメソッドgetTimestampを使用しています

2012年10月28日=13513788002012年10月29日=135146880090000の増分

したがって、もう一度1時間が追加されました。これは、この仮定が正しいことを意味します。

明らかに、クラスはこれに対処できます。しかし、これまで、タイムスタンプをインクリメントしても問題が発生する可能性があるという事実については言及されていませんでした...したがって、DateTimeクラスまたは別のアプローチを使用して、遭遇しました。

コードを変換する必要がある場合は、クラスを使用します。しかし、なぜこれが必要なのか知りたいのです。

4

2 に答える 2

6

夏時間のため、2012 年 10 月 28 日にはタイムゾーンが 1 時間長くなります。2010 年 28 日の午前 0 時から 2010 年 29 日の午前 0 時までは 25 時間あります。

春には23時間ある日もあります。

これが期待どおりでない場合は、タイムゾーンを DST のないものに変更してください。UTC は 1 つのオプションです。

php > echo mktime(0,0,0,10,29,2012) - mktime(0,0,0,10,28,2012);
90000
php > ini_set('date.timezone', 'UTC');
php > echo mktime(0,0,0,10,29,2012) - mktime(0,0,0,10,28,2012);
86400
于 2012-09-20T15:39:59.457 に答える
1

私はこれを突き刺すつもりです。10 月 29 日は、サマータイムのちょうど 1 週間前です (サマータイムが異なる国にいる場合を除きます)。しかし、1 時間戻すと、1 日はさらに 1 時間長くなります。

于 2012-09-20T15:44:13.297 に答える