Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将PHP DateTime对象转换为ISO字符串?_Php_Date_Datetime - Fatal编程技术网

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

如何将PHP DateTime对象转换为ISO字符串?,php,date,datetime,Php,Date,Datetime,对于JSON日期,我有一个以MS格式接收的日期。看起来是这样的: /Date(1365004652303)/ 我可以通过以下操作将其转换为PHP DateTime对象: $timestamp = round(((int) $originalMSdate) / 1000); $convertedDate = new DateTime(); $convertedDate->setTimestamp($timestamp); 但最终,我需要它是ISO 8601格式的字符串。我尝试将其转换为I

对于JSON日期,我有一个以MS格式接收的日期。看起来是这样的:

/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 我没有看到日期格式的字符

我怎样才能做到这一点


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

请尝试以下代码

<?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-25T14: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

ISO 8601格式代码
c
可能重复;根据或者
DateTime::ATOM
:啊,谢谢你,@markbaker。我没有看到“c”,因为我正在查看日期对象格式,而不是日期字符串格式。