Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP strotime()函数错误1小时?_Php_Mysql_Strtotime_Unix Timestamp - Fatal编程技术网

PHP strotime()函数错误1小时?

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,

在将日期和时间插入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,而不是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