【问题标题】:PHP - format date ISO8601?PHP - 格式化日期 ISO8601?
【发布时间】:2011-09-09 22:07:40
【问题描述】:

我有一年(2002 年),我正在尝试将其转换为以下格式:

2002-00-00T00:00:00

我尝试了各种迭代,最后一次是这样的:

$testdate = DateTime::createFromFormat(DateTime::ISO8601, date("c"))
echo date_format($testdate, '2002'); 

但是,即使我接近了,它似乎总是在它的末尾添加 +00:00...

【问题讨论】:

    标签: php date iso8601


    【解决方案1】:

    PHP 中的“c”格式总是附加时区偏移量。你无法避免这一点。但是您可以自己从组件中构建日期:

    date('Y-m-d\TH:i:s', $testdate);
    

    【讨论】:

    • 我似乎总是让事情变得比必要的复杂......谢谢!
    • 天哪!我一直在寻找这个。我想出了“c”部分,但不知道我必须逃避 T。我一直在为 T 获取时区。唷!谢谢。
    • gmdate('Y-m-d\TH:i:s\Z', $date)
    【解决方案2】:

    最好的方法是使用常量(PHP 5 >= 5.5.0, PHP 7)

    date(DATE_ISO8601, $timeToChange);
    

    文档: http://php.net/manual/en/class.datetimeinterface.php#datetime.constants.types

    【讨论】:

    • DATE_ISO8601 还添加了 OP 试图避免的 +00:00 时区位。示例:echo date(DATE_ISO8601, 1612308970); // prints "2021-02-02T23:36:10+0000"
    • 创建新常量并像在示例中一样使用它,因为这应该是可重用且易于阅读的 - 根据我发送的链接。定义(“DATE_ISO8601_WITHOUT_TIME”,“Y-m-d\TH:i:s”);日期(DATE_ISO8601_WITHOUT_TIME,$timeToChange);
    【解决方案3】:

    问题多次出现在 4 或 8 决赛中的毫秒和最后微秒。要将 DATE 转换为 ISO 8601 "date(DATE_ISO8601)",这些是适合我的解决方案之一:

    // In this form it leaves the date as it is without taking the current date as a reference
    $dt = new DateTime();
    echo $dt->format('Y-m-d\TH:i:s.').substr($dt->format('u'),0,3).'Z';
    // return-> 2020-05-14T13:35:55.191Z
    
    // In this form it takes the reference of the current date
    echo date('Y-m-d\TH:i:s'.substr((string)microtime(), 1, 4).'\Z');
    return-> 2020-05-14T13:35:55.191Z
    
    // Various examples:
    $date_in = '2020-05-25 22:12 03.056';
    $dt = new DateTime($date_in);
    echo $dt->format('Y-m-d\TH:i:s.').substr($dt->format('u'),0,3).'Z';
    // return-> 2020-05-25T22:12:03.056Z
    
    //In this form it takes the reference of the current date
    echo date('Y-m-d\TH:i:s'.substr((string)microtime(), 1, 4).'\Z',strtotime($date_in));
    // return-> 2020-05-25T14:22:05.188Z
    

    上一期发表:https://stackoverflow.com/a/61796705/5898408

    【讨论】:

      【解决方案4】:
      date('Y-m-d\TH:i:s\Z', time() - date('Z'));
      

      【讨论】:

      • 详细阐述以获得更好的解释
      • 感谢您提供此代码 sn-p,它可能会提供一些有限的短期帮助。一个正确的解释would greatly improve 它的长期价值通过展示为什么这是一个很好的解决问题的方法,并将使它对未来有其他类似问题的读者更有用。请edit您的回答添加一些解释,包括您所做的假设。
      猜你喜欢
      • 2021-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-05
      • 1970-01-01
      相关资源
      最近更新 更多