关于日期:如何将PHP DateTime对象转换为ISO字符串?

How to convert a PHP DateTime object to ISO string?

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

1
/Date(1365004652303)/

我可以通过这样做将它转换为PHP DateTime对象:

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

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

我也试过了

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

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

我怎样才能做到这一点?

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


请尝试以下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?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
);

这有效:

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

格式不完全相同。 它采用以下格式:

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

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