2016-05-13 87 views
2

我有一个日期,我收到MS格式的JSON日期。它看起来像这样:如何将PHP DateTime对象转换为ISO字符串?

/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 。

我该如何做到这一点?

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

+0

http://php.net/manual/en/function.date.php –

+1

[将字符串转换为日期时间]的可能重复(http://stackoverflow.com/questions/466345/converting-string-into-datetime ) – Sipty

+1

ISO 8601格式代码'c';根据[PHP Documentation](http://nl3.php.net/manual/en/function.date.php) –

回答

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 
); 
0

这工作:

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

格式不完全一样。它的格式如下:

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

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

相关问题