php时间没有给出正确的日期

时间:2009-10-30 18:10:07

标签: php mysql

我希望在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

7 个答案:

答案 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,您需要注意几件事。

  1.   

    CURRENT_TIMESTAMP(),CURRENT_TIME(),CURRENT_DATE()和FROM_UNIXTIME()函数返回连接当前时区的值,该值可用作 time_zone 系统变量的值。 / p>

    因此,您的查询结果已经位于“本地时区”,其中本地取决于various settings(每个连接和全局)。

  2.   

    此外,UNIX_TIMESTAMP()假定其参数是当前时区的日期时间值。

    这意味着当您将时间戳插入数据库时​​,您应该在没有参数的情况下调用它,或者确保您提供的日期时间字符串来自MySQL考虑其本地时区的相同时区。那个连接。

  3. 由于看起来您只想从数据库中检索信息,然后决定如何在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)

http://codepad.org/BesoexCf

返回正确的时间(对我来说几分钟,但这是预期的。)

在服务器上运行上述内容后会得到什么?

答案 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
祝你好运!