【问题标题】:Converting a UNIX Timestamp to Formatted Date String将 UNIX 时间戳转换为格式化的日期字符串
【发布时间】:2012-04-19 21:11:32
【问题描述】:

使用 PHP,我想将 UNIX 时间戳转换为类似于此的日期字符串:2008-07-17T09:24:17Z

如何将1333699439 等时间戳转换为2008-07-17T09:24:17Z

【问题讨论】:

    标签: php unix-timestamp


    【解决方案1】:

    像这样尝试gmdate

    <?php
    $timestamp=1333699439;
    echo gmdate("Y-m-d\TH:i:s\Z", $timestamp);
    ?>
    

    【讨论】:

    • 请注意gmdate() 以格林威治标准时间返回日期/时间。 date() 将返回本地日期/时间。
    • 以上评论在这种情况下没有意义。如答案所示,使用带有第二个参数的日期作为时间戳,将不会打印本地时区的日期。打印日期时忽略时区信息,因为时间戳没有时区信息。 gmdate 和第二个时间戳参数为 1333699439 的日期将打印相同的日期时间。
    • @MattK:这是有道理的,因为 Z 表示 UTC。 Tinus:Unix 时间戳不包含时区偏移。 dategmdate 的输出将根据 TZ 变量而有所不同(至少在 *nix 上)
    • @KasparL.Palgi 您必须将时间戳除以 1000 才能得到正确的年份,因为此时间戳以毫秒为单位存储。
    【解决方案2】:

    使用日期函数date ( string $format [, int $timestamp = time() ] )

    使用 date('c',time()) 作为格式转换为 ISO 8601 日期(在 PHP 5 中添加) - 2012-04-06T12:45:47+05:30

    使用date("Y-m-d\TH:i:s\Z",1333699439) 获取2012-04-06T13:33:59Z

    以下是日期函数支持的一些格式

    <?php
    $today = date("F j, Y, g:i a");                 // March 10, 2001, 5:16 pm
    $today = date("m.d.y");                         // 03.10.01
    $today = date("j, n, Y");                       // 10, 3, 2001
    $today = date("Ymd");                           // 20010310
    $today = date('h-i-s, j-m-y, it is w Day');     // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
    $today = date('\i\t \i\s \t\h\e jS \d\a\y.');   // it is the 10th day.
    $today = date("D M j G:i:s T Y");               // Sat Mar 10 17:16:18 MST 2001
    $today = date('H:m:s \m \i\s\ \m\o\n\t\h');     // 17:03:18 m is month
    $today = date("H:i:s");                         // 17:16:18
    ?>
    

    【讨论】:

    • 如何用'c'转换特定的时间戳?例如 1333699439
    • 这不起作用 date("Y-m-d\TH:i:s\Z",1333699439) 我得到了 2012-04-06EDT04:03:59-14400
    • @Ahmet - 注意定义字符串时使用双引号和单引号
    • @user2060451 前面有反斜杠的任何内容都显示为结果时间字符串中的文字字符
    • @user2060451: Z 应该表示 UTC 时间(在这种情况下应该使用 gmdate...)在您最喜欢的研究资源上查看 ISO8601 信息。
    【解决方案3】:

    假设您使用的是 PHP5.3,那么处理日期的现代方式是通过本机 DateTime class。要获取当前时间,您只需调用

    $currentTime = new DateTime();
    

    从特定时间戳(即不是现在)创建 DateTime 对象

    $currentTime = DateTime::createFromFormat( 'U', $timestamp );
    

    要获取格式化的字符串,您可以调用

    $formattedString = $currentTime->format( 'c' );
    

    manual page here

    【讨论】:

    • 如何用这个转换特定的时间戳?例如 1333699439
    • @Norse 我当然读过他的帖子。他需要的所有信息都在我的帖子中。他所要做的就是阅读 DateTime 对象的 PHP 文档。我已经编辑了我的帖子以使其更加清晰。 DateTime 对象是 PHP 中的一种方式,应该鼓励所有新手使用它。到目前为止,我是唯一一个提供这个答案的人。顺便说一句,我觉得你的评论有点咄咄逼人,不太符合 SO 的精神。
    • @Ahmetvardar 查看我的编辑,尽管所有这些都在我提供链接的 PHP 文档中。我强烈建议您开始使用 DateTime 对象。它为日期/时间(包括时区等)提供了出色的支持
    【解决方案4】:

    设置默认时区以获得正确的结果非常重要

    <?php
    // set default timezone
    date_default_timezone_set('Europe/Berlin');
    
    // timestamp
    $timestamp = 1307595105;
    
    // output
    echo date('d M Y H:i:s Z',$timestamp);
    echo date('c',$timestamp);
    ?> 
    

    在线转换帮助:http://freeonlinetools24.com/timestamp

    【讨论】:

    • 在ISO8601中,Z用来表示是UTC时间,所以时区要设置为UTC
    【解决方案5】:
    <?php
    $timestamp=1486830234542;
    echo date('Y-m-d H:i:s', $timestamp/1000);
    ?>
    

    【讨论】:

    • 在没有分隔部分的情况下工作。否则日期默认为 1970。
    • 这对我有用。不知道为什么其他人说它不起作用。可能是因为我使用的是 PHP7.2?
    • @LapiztheProgrammer 是的,它取决于 PHP 版本
    • 我从外部 API 获取值,它看起来像:'1623923723000'。在这种情况下,需要除法部分才能得到正确的日期:'2021-06-17 11:55:23'。感谢分享解决方案。
    【解决方案6】:
    $unixtime_to_date = date('jS F Y h:i:s A (T)', $unixtime);
    

    这应该可以。

    【讨论】:

      【解决方案7】:

      DateTime 类在构造函数中接受一个字符串。如果您在时间戳前面加上 @ 字符,您将创建一个带有时间戳的 DateTime 对象。对于格式化,请使用“c”格式...预定义的 ISO 8601 复合格式。

      如果可以像这样使用 DateTime 类...设置正确的时区,如果您想要 UTC 时间,则将其省略。

      $dt = new DateTime('@1333699439');
      $dt->setTimezone(new DateTimeZone('America/New_York'));
      echo $dt->format('c');
      

      【讨论】:

        【解决方案8】:

        我发现此对话中的信息非常有用,因此我只想通过使用 MySQL 数据库中的时间戳和一点 PHP 来添加我的计算方法

         <?= date("Y-m-d\TH:i:s\+01:00",strtotime($column['loggedin'])) ?>
        

        输出为:2017-03-03T08:22:36+01:00

        非常感谢 Stewe,您的回答对我来说是一个尤里卡。

        【讨论】:

          【解决方案9】:

          你可以像.....

          $originalDate = "1585876500";
          
          echo $newDate = date("Y-m-d h:i:sa", date($originalDate));
          

          【讨论】:

            猜你喜欢
            • 2011-03-16
            • 1970-01-01
            • 2019-07-30
            • 2021-03-11
            • 2014-11-18
            • 2012-06-23
            • 2011-09-23
            • 1970-01-01
            相关资源
            最近更新 更多