php:DateTime()和time()有不同的时间

php:DateTime()和time()有不同的时间,php,linux,ubuntu,vagrant,homestead,Php,Linux,Ubuntu,Vagrant,Homestead,我使用的是流浪者箱(宅地),时区设置为欧洲/布鲁塞尔 使用命令“date”进入终端的当前时间返回以下值: 2018年3月25日星期日23:27:40 CEST 在cli和fpm php.ini文件中,我已经: date.timezone=“欧洲/布鲁塞尔” 同时运行以下代码: 打印(新日期时间()); 打印(时间()) 给出了以下结果: 对于DateTime(): 以及时间的历元时间戳() 将后者转换为: Sun, 25 Mar 2018 21:27:43 GMT 根据DateTime的结果,

我使用的是流浪者箱(宅地),时区设置为欧洲/布鲁塞尔

使用命令“date”进入终端的当前时间返回以下值:

2018年3月25日星期日23:27:40 CEST

在cli和fpm php.ini文件中,我已经:

date.timezone=“欧洲/布鲁塞尔”

同时运行以下代码: 打印(新日期时间()); 打印(时间())

给出了以下结果: 对于DateTime():

以及时间的历元时间戳()

将后者转换为:

Sun, 25 Mar 2018 21:27:43 GMT
根据DateTime的结果,我可以假设php.ini中的时区设置是正确的。但是为什么DateTime和time之间的时间不同呢

返回Unix时间戳并始终以GMT为单位:

返回当前测量的时间(以秒为单位) Unix时代(1970年1月1日00:00:00 GMT)

21:27:43 GMT
等于
23:27:43 CEST


正如注释中所指出的:实际上unix时间戳是UTC的,但是PHP。不幸的是,文档对此不是很有启发性。

我自己对PHP不是很有经验,但对于time()我看到了GMT。GMT是您使用的时区还是UTC(或其他)?它们可能是完全分离的


或者,对于更高级的信息,

严格来说,Unix时钟与UTC而不是GMT对齐,尽管差异很小,对于大多数情况来说都无关紧要。那么,我应该使用什么来设置cookie的过期时间呢?DateTime并将其转换为时间戳或time()?这真的很让人困惑。如果您正在使用,那么这个函数需要一个Unix时间戳,由
time()
@Marvin返回,我知道setcookie需要Unix时间戳。但是使用time()函数获取时间戳给了我错误的时间。i、 e.它给出了-2小时的时间。因此,如果我将cookies过期时间设置为3600,cookies将过期2小时。这意味着我应该获得用户的浏览器时区,并相应地设置cookie时间?它不会给你错误的时间-只是在不同时区的同一时间点。并且还期望GMT/UTC(参见5.1.1),甚至要求它(参见3.3.1;明确说明GMT和UTC在HTTP中是相等的)。
1522013263
Sun, 25 Mar 2018 21:27:43 GMT