如何将PHP DateTime对象转换为ISO字符串


How to convert a PHP DateTime object to ISO string?

我收到了一个JSON日期的MS格式的日期。它看起来像这样:

/Date(1365004652303)/

我可以通过以下操作将其转换为PHP DateTime对象:

$timestamp = round(((int) $originalMSdate) / 1000);
$convertedDate = new DateTime();
$convertedDate->setTimestamp($timestamp);

不过,最终我需要它是一个ISO8601格式的字符串。然后我尝试将它转换为ISO日期对象&然后用strval()将其转换为字符串,但strval(()在日期对象上不起作用。

我也试过

$dateString = date_format($convertedDate, 'YY-MM-DD H:i:s'); 

但我需要它还包括时区信息,比如:2015-10-01T21:22:57.057Z我在date_format中看不到相应的字符。

我怎样才能做到这一点?

编辑:我应该澄清一下,我没有打印结果字符串。我需要将它传递给数据库中接受字符串数据类型的字段。

请尝试以下代码

<?php
// input
$time = microtime(true);
// Determining the microsecond fraction
$microSeconds = sprintf("%06d", ($time - floor($time)) * 1000000);
// Creating DT object
$tz = new DateTimeZone("Etc/UTC");
$dt = new DateTime(date('Y-m-d H:i:s.'. $microSeconds, $time), $tz);
$iso8601Date = sprintf(
    "%s%03d%s",
    $dt->format("Y-m-d'TH:i:s."),
    floor($dt->format("u")/1000),
    $dt->format("O")
);
// Formatting according to ISO 8601-extended
var_dump(
     $iso8601Date
);

这很有效:

$timestamp = round(((int) $originalMSdate) / 1000);
$dateString = date('c', $timestamp);

格式并不完全相同。它的格式是:

2016-04-25T14:27:00-05:00而不是2016-04-25 t14:27 00.057Z

但它足够近,我可以做一些操作来得到我需要的东西。

这篇文章对我有用。有关更多信息,请参阅本文。

$date = date('Y-m-d H:m:s');
echo date('c', strtotime($date));                // 2020-04-08T16:04:56+05:30
echo date(DateTime::ISO8601, strtotime($date));  // 2020-04-08T16:04:56+0530
echo date(DateTime::ATOM, strtotime($date));     // 2020-04-08T16:04:56+05:30