代码之家  ›  专栏  ›  技术社区  ›  Matthew James Taylor

如何用PHP将日期显示为ISO 8601格式

  •  52
  • Matthew James Taylor  · 技术社区  · 15 年前

    我试图用php将MySQL数据库中的日期时间显示为iso 8601格式的字符串,但结果是错误的。

    2008年10月17日发布为:1969-12-31T18:33:28-06:00,这显然是不正确的(年份应该是2008年而不是1969年)

    这是我使用的代码:

    <?= date("c", $post[3]) ?>
    

    $post[3] is the datetime (CURRENT_TIMESTAMP) 从我的MySQL数据库。

    有什么问题吗?

    5 回复  |  直到 6 年前
        1
  •  69
  •   Paolo Bergantino    14 年前

    第二个论点 date 是UNIX时间戳,而不是数据库时间戳字符串。

    您需要将数据库时间戳转换为 strtotime .

    <?= date("c", strtotime($post[3])) ?>
    
        2
  •  28
  •   John Conde    10 年前

    使用 DateTime class 在php版本5.2中,可以这样做:

    $datetime = new DateTime('17 Oct 2008');
    echo $datetime->format('c');
    

    See it in action

    从PHP5.4开始,您可以将其作为一个单行程序:

    echo (new DateTime('17 Oct 2008'))->format('c');
    
        3
  •  12
  •   John Slegers    8 年前

    程序样式:

    echo date_format(date_create('17 Oct 2008'), 'c');
    // Output : 2008-10-17T00:00:00+02:00
    

    面向对象样式:

    $formatteddate = new DateTime('17 Oct 2008');
    echo $datetime->format('c');
    // Output : 2008-10-17T00:00:00+02:00
    

    混合动力1:

    echo date_format(new DateTime('17 Oct 2008'), 'c');
    // Output : 2008-10-17T00:00:00+02:00
    

    混合动力2:

    echo date_create('17 Oct 2008')->format('c');
    // Output : 2008-10-17T00:00:00+02:00
    

    笔记:

    1)您也可以使用 'Y-m-d\TH:i:sP' 作为替代 'c' 为您的格式。

    2)输入的默认时区是服务器的时区。如果希望输入用于不同的时区,则需要显式设置时区。但是,这也会影响您的输出:

    echo date_format(date_create('17 Oct 2008 +0800'), 'c');
    // Output : 2008-10-17T00:00:00+08:00
    

    3)如果希望输出的时区与输入的时区不同,可以显式设置时区:

    echo date_format(date_create('17 Oct 2008')->setTimezone(new DateTimeZone('America/New_York')), 'c');
    // Output : 2008-10-16T18:00:00-04:00
    
        4
  •  7
  •   Newmania    14 年前

    对于PHP前5:

    function iso8601($time=false) {
        if(!$time) $time=time();
        return date("Y-m-d", $time) . 'T' . date("H:i:s", $time) .'+00:00';
    }
    
        5
  •  6
  •   Guillaume    14 年前

    下面是适用于php 5之前版本的好函数: 我在最后添加了格林威治标准差,它不是硬编码的。

    function iso8601($time=false) {
        if ($time === false) $time = time();
        $date = date('Y-m-d\TH:i:sO', $time);
        return (substr($date, 0, strlen($date)-2).':'.substr($date, -2));
    }