我有怎样的一个棘手的问题,我已经搜查每#1相关的问题和解决既不我的难题的,虽然我觉得我手忙脚乱,所以这里的问题:

我有这样的代码:

$val = (strtotime('2010-03-22 10:05:00')-strtotime('2010-03-22 09:00:00'))

此返回正确$ VAL = 3900(3600秒= 1小时后,300秒= 5分钟)

但是,这样做的:

echo date("H:i",$val)."<br>";

返回02:05

甚至这样:

echo date("H:i",3900)."<br>";

返回02:05(只是要天真地肯定)

这样做:

echo date("H:i eTO",3900)."<br>";

返回

02:05 System/LocaltimeCET+0100

哪个是正确的,我的时区是CET和是1。

这是怎么回事?为DATE()修正由于某种原因时区?还是我做错了什么?

有帮助吗?

解决方案

这是发生,因为使用日期(,)返回历元(00:00:00 1970年1月1日UTC)+的秒的时间戳的数目。它将自身定位于你的时区,所以如果你为0的时间戳提供它,它会返回1970年01:00:00 01月01日UTC + 1。

其他提示

是,它被校正时区。当你

$val = (strtotime('2010-03-22 10:05:00')-strtotime('2010-03-22 09:00:00'))

,什么是存储在$val是01:05时间戳,1970年1月1日UTC。请参见维基百科上关于UNIX时间的文章。

如果你与两个时间戳之间的差别的工作,我建议使用的日期时间:: DIFF (需要PHP 5.3)。

我这样做:

date_default_timezone_set('Europe/Helsinki');

这是GMT + 02:00

和,结果是:

03:05 Europe/HelsinkiEET+0200

因此,它实际上是校正时区,解释现在我发现是非常简单(我有一个顿悟):日期()计算秒内从“1970年1月1日格林尼治标准时间” 所以实际上3900在我的时区和实施例是正确的 “02:05”从该日期...

自学习1 -_-'

这实际上是正确的行为,因为日期与本地时间工作,而你是在格林尼治标准时间+1。你给它一个时间戳(3900),这是1/1/1970 1:05,它只是广告1得到它你的时区。

如果这是你的使用目的,不是你可以只减去GMT偏移你的机器得到正确的值。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top