【问题标题】:PHP date not getting the correct timePHP日期没有得到正确的时间
【发布时间】:2014-10-30 20:25:27
【问题描述】:

我的 php 日期函数有一个令人恼火的问题,它获取了错误的时间。

我正在使用 ubuntu 12.04LTS 和 php 版本 5.3.10-1ubuntu3.13

我的系统时间是正确的:

    #sudo hwclock --debug
    hwclock from util-linux 2.20.1
    Using /dev interface to clock.
    Last drift adjustment done at 1409943046 seconds after 1969
    Last calibration done at 1409943046 seconds after 1969
    Hardware clock is on UTC time
    Assuming hardware clock is kept in UTC time.
    Waiting for clock tick...
    ...got clock tick
    Time read from Hardware Clock: 2014/09/05 20:11:17
    Hw clock time : 2014/09/05 20:11:17 = 1409947877 seconds since 1969
    Fri 05 Sep 2014 21:11:17 BST  -0.550945 seconds
#date
Fri Sep  5 21:12:23 BST 2014

但是,如果我使用日期,我会得到:

TIME STAMP: 1409944442
DATE (M/D/Y @ h:m:s): 09 / 05 / 14 @ 7:14:02pm UTC

在我的 php 代码中,我有这个: date_default_timezone_set('欧洲/伦敦'); 当前时间比这个时间提前了 2 小时。如果在我做date('I') 时检测到夏令时是真的,但这只需要我到晚上 8 点,我还需要一个额外的小时。

我没有更改我的 php.ini 我确实运行了 ntp 服务,如果它是正确的时间(不确定是否需要该信息?)

感谢您的帮助

【问题讨论】:

  • 它们是两个不同的时区。您需要将时间戳从 UTC 转换为服务器的当前时区。

标签: php


【解决方案1】:

你可以使用time()函数

<?php
   date_default_timezone_set("UTC");
   echo "UTC:".time();
   date_default_timezone_set("Europe/Helsinki");
   echo "Europe/Helsinki:".time();

   $now = time()+ (24 * 60 * 60);
   echo $now;
?> 

你想以哪种方式使用它

【讨论】:

    【解决方案2】:

    我看不出问题出在哪里。你的两个时间戳显然是在不同的时间拍摄的,当你考虑到这种差异时,你从它们那里得到的时间字符串是相同的:

    hwclock: 1409947877 -> 2014/09/05 20:11:17
    date   : 1409944442 -> 2014/09/05 19:14:02
    ------------------
     diff  :       3435 seconds
    
     20:11:17 - 19:14:02 = 3435 seconds
    

    如果是时区问题,那么您的差异将是 3600(1 小时)的整数倍。不是 0.954166666 小时。

    【讨论】:

      【解决方案3】:

      now()MySQl database 中的内置函数。如果您尝试获取时间戳,那么您可以使用上面回答的 PHP time() 或在您正在使用的数据库中进行设置。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-15
        • 1970-01-01
        • 1970-01-01
        • 2017-02-12
        • 2019-04-10
        • 1970-01-01
        相关资源
        最近更新 更多