我希望在UNIX时间戳中获取当前日期和时间,以便进行一些计算,但我没有得到正确的时间。日期是正确的但是时间已经过去了。我已经设定了我的时区,所以我迷失了。有人可以帮忙吗?
感谢。
以下是我正在使用的一些代码:
date_default_timezone_set('America/Los_Angeles');
echo time();
输出: 1256926663,相当于2009年10月30日星期五18:17:43 GMT。
这是不正确的。应该是什么:2009年10月30日星期五,太平洋标准时间10:17:43太空飞船
好吧,问题是不和我想的时间戳。我使用MySQL来解释时间戳,但它不正确。这是我正在使用的:
FROM_UNIXTIME(timestamp, '%M %D, %Y - %l:%i %p') AS timestamp
答案 0 :(得分:5)
听起来您的服务器设置时间错误 PHP没有它自己的时钟。
//编辑
看起来输出的时间是正确的
time() function输出:
自Unix Epoch(1970年1月1日00:00:00 GMT)以来的秒数。
这意味着GMT时间 您所追求的是date(),另一方面输出当地时间/日期。
答案 1 :(得分:2)
time()返回一个unix时间戳,它总是gmt并忽略任何语言环境设置。使用date()格式化unix标记并尊重区域设置。
答案 2 :(得分:2)
根据MySQL's docs,您需要注意几件事。
CURRENT_TIMESTAMP(),CURRENT_TIME(),CURRENT_DATE()和FROM_UNIXTIME()函数返回连接当前时区的值,该值可用作 time_zone 系统变量的值。 / p>
因此,您的查询结果已经位于“本地时区”,其中本地取决于various settings(每个连接和全局)。
此外,UNIX_TIMESTAMP()假定其参数是当前时区的日期时间值。
这意味着当您将时间戳插入数据库时,您应该在没有参数的情况下调用它,或者确保您提供的日期时间字符串来自MySQL考虑其本地时区的相同时区。那个连接。
由于看起来您只想从数据库中检索信息,然后决定如何在PHP中对其进行格式化,因此从数据库中简单地提取未修改的时间戳可能更为明智。然后,您的PHP代码可以处理,确保根据与用户相关的时区对其进行格式化。
答案 3 :(得分:1)
对我来说是正确的:
date_default_timezone_set('UTC');
echo date('r', 1256926663);
// Fri, 30 Oct 2009 18:17:43 +0000
date_default_timezone_set('America/Los_Angeles');
echo date('r', 1256926663);
// Fri, 30 Oct 2009 11:17:43 -0700
答案 4 :(得分:0)
如果您完全确定服务器的时间正确,并且您已正确设置时区,那么通过扣除功能,我只能假设您用于解析时间的计算不正确。
更多细节在这里会有所帮助,但听起来你仍然没有正确设置时区。
答案 5 :(得分:0)
答案 6 :(得分:-1)
考虑检查您的NTP守护程序。
$ /etc/init.d/ntpd stop
$ ntpdate -q pool.ntp.org
# If it's off by much, jump it to the right time:
$ ntpdate pool.ntp.org
$ /etc/init.d/ntpd start
确保它启动:
chkconfig ntpd --list
祝你好运!