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

时间:2016-05-13 15:44:15

标签: php date datetime

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

/Date(1365004652303)/

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

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

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

我也试过

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

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

我怎样才能做到这一点?

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

3 个答案:

答案 0 :(得分:1)

请尝试以下代码

<?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 :(得分:0)

这有效:

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

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

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

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

答案 2 :(得分:0)

这个对我有用。有关更多信息,请refer本文。

$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