PHP strotime()函数错误1小时?
在将日期和时间插入MySQL数据库之前,我使用PHP将其转换为时间戳 我的问题是,当我使用PHP的strotime函数时,输出时间戳比实际时间晚了-1小时 例如,考虑到今天的日期:2010年7月21日。当我使用php代码时,如:PHP strotime()函数错误1小时?,php,mysql,strtotime,unix-timestamp,Php,Mysql,Strtotime,Unix Timestamp,在将日期和时间插入MySQL数据库之前,我使用PHP将其转换为时间戳 我的问题是,当我使用PHP的strotime函数时,输出时间戳比实际时间晚了-1小时 例如,考虑到今天的日期:2010年7月21日。当我使用php代码时,如: <?php $my_timestamp = strtotime("07/21/2010"); echo $my_timestamp; ?> 发送回的时间戳等于GMT减去1小时。i、 我回来的时间是:2010年7月20日格林威治标准时间23:00:00,
<?php
$my_timestamp = strtotime("07/21/2010");
echo $my_timestamp;
?>
发送回的时间戳等于GMT减去1小时。i、 我回来的时间是:2010年7月20日格林威治标准时间23:00:00,而不是2010年7月21日格林威治标准时间00:00:00
我住在英国,所以我的时区是GMT。我在脚本中使用date_default_timezone_set('Europe/London')声明了我的时区,并且我还确保php.ini文件设置为'Europe/London'
这可能与夏令时有关吗?如何在不给所有日期增加1小时的情况下解决此问题?在夏令时期间,欧洲/伦敦时间不是格林尼治标准时间。您需要将其设置为UTC
date\u default\u timezone\u set('UTC')代码>
date\u default\u timezone\u set('GMT')
可能有效,但正如Kenneth在下面的评论中所指出的,它已被弃用。
在PHP 5.3之前,strotime
在计算时间时遇到了问题,如果您添加或扣除了月份和天数等,那么这是固定的,因此您现在可以具体说明如何计算时间,如果您低于PHP5.3,我建议您使用mysql进行日期计算,或者升级您的PHP版本。伦敦时区在夏季以英国夏季时间表示。话虽如此,以UTC存储时间并以UTC或当地时间向最终用户显示时间是一种很好的做法
确保系统时间为UTC可能也是明智的做法。如果您只需要在日期上加1小时,请在时间戳上加3600秒(3600秒=1小时)。您的时区不是GMT,英国现在是夏季时间,也就是GMT+1@nos为什么不加上这个作为答案,我认为这是正确的答案。只是澄清一下,GMT作为时区仍然存在,即使我们英国人不在其上。我们现在的时区是英国夏令时(格林尼治标准时间+1),所以你错误地假设你在格林尼治标准时间,这就是问题的原因,正如已经指出的那样。不比加利福尼亚的那个家伙更糟糕,他告诉我他一年四季都在PDT上:(当然不是你理解PHP的日期和时间函数被“窃听”?@Android Noob我不确定我是否希望这样做。1个月不是一个固定的计量单位。它可能是28、29、30或31天,取决于月份,不同于其他strotime()解释确实有效(+1天,+1周),无论何时发生,都是一个固定的时间量如我所料。+1个月
只是将月份部分增加为1。因为2009-02-31不存在,所以溢出到03。这与GNU规范一致。你可以使用下个月的第一天
或下个月的最后一天
@yc,因为2008年是闰年。所以2008-02-31溢出到2008-0改为3-02。@Android为什么“不一致?”+1个月会在日期的月份部分加上1个月。如果该日期不存在,则会溢出。自函数创建以来,它一直在这样做。仅仅因为它不符合您对它应该做什么的概念,并不意味着它“被窃听”该函数的行为一致且正确。事实上,1月31日+1个月=3月2日
完全有意义。您希望它做什么?警告:在较新版本的PHP中,GMT已经贬值,虽然它仍然暂时受到支持,但强烈建议改用UTC。@Kenneth补充了一条说明。谢谢s