加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php日期和夏令时混淆

发布时间:2020-12-13 21:49:47 所属栏目:PHP教程 来源:网络整理
导读:我有一个问题,我99%相信它与昨天开始的夏令时相关. 以下脚本: ?php $i=1383451200; echo $i," ",date('Y-m-d I',@$i); echo "n"; $i = $i + 86400; echo $i,@$i); echo "n";? (其中86400是一天中的秒数) 给出以下输出 1383451200 2013-11-03 1 138353760
我有一个问题,我99%相信它与昨天开始的夏令时相关.

以下脚本:

<?php
 $i=1383451200;
 echo $i," ",date('Y-m-d I',@$i);
 echo "n";
 $i = $i + 86400;
 echo $i,@$i);
 echo "n";
?>

(其中86400是一天中的秒数)

给出以下输出

1383451200 2013-11-03 1
1383537600 2013-11-03 0

2个时间戳,以一天中的秒数分隔,输入日期(),给出相同的日期2013-11-03

因为它是IS 11/3/2013并且我知道我们切换到夏令时并且I格式说明符表示一个时间戳在DST中而且一个不是我认为可以说我的系统上有错误的配置.

问题是,如何修复它?我已经完成了:

pecl install timezonedb

并将以下内容添加到php.ini中

延长= /usr/lib中/ PHP5 / 20100525 / timezonedb.so

在我的系统上.

我的系统是Macbook Pro上的Ubuntu 12.10,我使用的是php 5

有任何建议如何解决这个问题?

这就是我想要做的.我想打印一个月内每天的日期.

$startTime = strtotime($start);
$endTime = strtotime($end);

其中$start和$end是YYYY-MM-DD形式的字符串(用户可以指定它们)

本月的个别日期计算如下:

for ($i = $startTime; $i <= $endTime; $i = $i + 86400) {
     $thisDate = date('Y-m-d',$i); 
}

我希望这打印出从可能的用户指定范围的开始到结束的一个月中每天的日期.

标记

解决方法

您不需要安装任何其他扩展来操作时区,但您需要了解PHP如何确定date()等函数的默认时区,该函数在 the manual page for the date_default_timezone_get() function中汇总.

很可能你的系统的php.ini将date.timezone选项设置为一个地理时区listed here,它将考虑该位置的本地夏令时规则.

如果你运行date_default_timezone_set(‘UTC’);您应该看到您的代码按预期输出不同的日期,如in this live example所示.如果您将所有时间戳视为UTC,您实际上可以完全回避时区和夏令时的问题,这可能适合您实际上并不知道您正在使用的数据应被解释为的时区(例如,它是否来自未指定该信息的远程源).

但是,从PHP 5.2开始,有一个功能强大的DateTime class可以将时区信息封装在对象中,并包含adding an interval of time to a date之类的方法.

请注意,DateTime上的方法会改变对象,而不是返回一个新对象;从PHP 5.5开始,还有DateTimeImmutable以相反的方式工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读