开发者

PHP - format date ISO8601?

I have a year (2002) and I'm trying to get it into the following format:

2002-00-00T00:00:00

I tried various iterations, the last of which was this:

$testdate = DateTime::cr开发者_如何学编程eateFromFormat(DateTime::ISO8601, date("c"))
echo date_format($testdate, '2002'); 

But, even if I come close, it always seems to add +00:00 to the end of it...


The 'c' format in PHP always appends the timezone offset. You can't avoid that. But you can build the date yourself from components:

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


Best way is to use constants (PHP 5 >= 5.5.0, PHP 7)

date(DATE_ISO8601, $timeToChange);

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


The problem many times occurs with the milliseconds and final microseconds that many times are in 4 or 8 finals. To convert the DATE to ISO 8601 "date(DATE_ISO8601)" these are one of the solutions that works for me:

// 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

Previous published: https://stackoverflow.com/a/61796705/5898408


date('Y-m-d\TH:i:s\Z', time() - date('Z'));
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜