Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php-时间戳-两天之间的间隔不总是86400秒-为什么?_Php_Timestamp - Fatal编程技术网

php-时间戳-两天之间的间隔不总是86400秒-为什么?

php-时间戳-两天之间的间隔不总是86400秒-为什么?,php,timestamp,Php,Timestamp,对……的补充问题 虽然接受类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

对……的补充问题

虽然接受类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/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应该创建一个与strotime或DateTime一样有效的时间戳

确实使用类DateTime方法getTimestamp

2012年10月28日=1351378800 2012年10月29日=1351468800增加90000

所以又加了一个小时,这意味着我的假设是正确的

显然,全班同学都能解决这个问题。但直到现在,还没有任何地方提到过这样一个事实,即无论时间戳是如何生成的,递增时间戳都可能导致问题。。。因此,必须使用DateTime类或其他方法来避免遇到的问题,例如


如果我必须转换代码,你就使用这个类吧。但我想知道为什么这是必要的。

由于夏令时,2012年10月28日有一个。10月28日午夜和10月29日午夜之间有25个小时

你还会发现春天有23个小时的一天

如果这不是您期望的,请将时区更改为没有DST的时区。UTC是一个选项:

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

我要试试看。10月29日正好是夏令时前一周(除非你所在的国家有不同的夏令时)。但是后退1小时会使一天多出1小时。

你听说过夏时制吗?这就是为什么你用实际日期而不是原始时间戳来计算日期的原因。@MarkBaker天哪,你在开玩笑,我怎么没想到呢!是的,我听说过日光节约,作为一名经验丰富的航海家,我经常将这些时差应用于潮汐表。我真不敢相信我错过了。哎哟回答得很好-我不必撤销已经编写的代码-我可以选择全年使用UTC。我还了解到我可以临时更改ini文件。顺便说一句,它的工作分页都是好的。
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