date()返回错误的一天,虽然时间戳是正确的!

时间:2010-04-10 12:20:35

标签: php datetime

我的php日期函数存在一个古怪的问题。

代码:

$numDays = 8;
$date = strtotime('2010-11-06');
for ($i=1; $i<=$numDays; $i++)
{
    $thisDay = date("D, d M Y", $date);
    print ($thisDay.'<br>');
    $date+=86400; // add one day to timestamp
}

结果在我的服务器上(本地主机,窗口):

周六,2010年11月6日

Sun,2010年11月7日

星期一,2010年11月8日

2010年11月9日星期二

2010年11月10日星期三

2010年11月11日星期四

2010年11月12日星期五

2010年11月13日星期六

我的网络服务器(linux)上的结果

周六,2010年11月6日

* Sun,2010年11月7日

Sun,2010年11月7日*

星期一,2010年11月8日

2010年11月9日星期二

2010年11月10日星期三

2010年11月11日星期四

2010年11月12日星期五

请注意Sun,2010年11月7日在远程服务器上出现两次?为什么会这样?谁能解释这种行为?

4 个答案:

答案 0 :(得分:8)

2010年11月7日是许多时区的DST切换日期(但不是您似乎所在的希腊)。来自Wikipedia

  

从2007年开始,大多数美国和加拿大从3月的第二个星期日到11月的第一个星期日(几乎是全年的三分之二)观察夏令时。

在希腊,似乎是October 31。您在机器上设置了哪个时区?

答案 1 :(得分:2)

这里很难确定,但是问题可能是由远程服务器时区的夏令时转换引起的吗?

在大多数国家/地区,过渡通常发生在周末,并且由于当天延长了一个小时,这是一种情况,在时间值上添加86400秒将在此之后返回日期。

答案 2 :(得分:2)

最好用UTC进行时间计算,然后使用PHP日期时间函数将它们转换为用户所在位置所需的时区:

date_default_timezone_set('UTC');
$timezone = new DateTimeZone('Europe/Athens');
$datetime = new DateTime('now', $timezone);
echo $datetime->format('Y-m-d H:i:s');

答案 3 :(得分:1)

运行代码的开始日期为+1小时,然后是-1小时,看看你得到了什么结果。您将获得更多线索,而且很可能与夏令时相关。

另外,正如Pekka所指出的那样,尝试使用设定为10月31日的日期,看看会发生什么。

好问题。