PHP - 格式日期ISO8601?

时间:2011-09-09 22:07:41

标签: php date iso8601

我有一年(2002年),我正试图将其改为以下格式:

2002-00-00T00:00:00

我尝试了各种迭代,其中最后一个是:

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

但是,即使我走近了,它似乎总是在它结束时添加+00:00 ......

3 个答案:

答案 0 :(得分:13)

PHP中的'c'格式总是附加时区偏移量。你无法避免这种情况。但是你可以自己从组件构建日期:

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

答案 1 :(得分:1)

问题经常出现在 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

答案 2 :(得分:0)

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

date(DATE_ISO8601, $timeToChange);

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