<?php

$str = "2019-05-13T10:00:00.000Z";
var_dump(DateTime::createFromFormat('Y-m-d\TH:i:s.uO', $str));
var_dump(DateTime::createFromFormat('Y-m-d\TH:i:s.uP', $str));
var_dump(DateTime::createFromFormat('Y-m-d\TH:i:s.uT', $str));

$str = "2019-05-13T10:00:00.000+01:00";
var_dump(DateTime::createFromFormat('Y-m-d\TH:i:s.uO', $str));
var_dump(DateTime::createFromFormat('Y-m-d\TH:i:s.uP', $str));
var_dump(DateTime::createFromFormat('Y-m-d\TH:i:s.uT', $str));

// diferença entre O, P e T se dá na formatação

$d = new DateTime("2019-05-13T10:00:00.000Z");
echo $d->format('O, P, T') . "\n";
$d = new DateTime("2019-05-13T10:00:00.000-03:00");
echo $d->format('O, P, T') . "\n";