我的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日在远程服务器上出现两次?为什么会这样?谁能解释这种行为?
答案 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日的日期,看看会发生什么。
好问题。