如何将PHP DateTime对象转换为ISO字符串?
对于JSON日期,我有一个以MS格式接收的日期。看起来是这样的:如何将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
/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”,因为我正在查看日期对象格式,而不是日期字符串格式。