PHP中的日期毫秒JSON转换

时间:2013-12-20 18:48:28

标签: php json date

使用JSON格式的API连接输入具有日期参数。

示例数组

  

数组([EventList] =>数组([0] =>数组([CheckDate] => /日期(1386834199000 + 0200)/ [ClickDate] => /日期(1386834199000 + 0200)/   [评论] => [CommissionTotal] => 0.54 [货币] =>尝试[日期] =>   /日期(1386834199000 + 0200)/ [描述] => [EventId] => 206540​​4   [EventNb] => 1 [MediaNb] => 21 [NetworkId] => 0 [OrderId] => 805832808   [PaymentId] => 0 [价格] => 10.74 [ProgramId] => 209 [状态] => 0   [VoucherCode] => [WebsiteId] => 19887 [PartnerSubId] => 1411-151   [PartnerUniqueId] => 5324a1e4ce795db54a10b32314f35d59)

所有日期都表示为 /日期(毫秒)/ ,以转换我使用的日期

<?php
$url = 'http://login.abc.com/';
$json = file_get_contents($url);
$cXML = json_decode($json, TRUE);
foreach($cXML['EventList'] as $sale)
{
    $createdmils= $sale['Date'];
    $createdmil= str_replace('/', '', $createdmils);
    $mils       = $createdmil / 1000;
    $createdDate = date("d-m-Y H:i:s", $mils);
    echo $createdDate;
}
?>

输出为:01-01-1970 02:00:00

这是不正确的,系统将日期视为N / A

如果数组中的日期只有几毫秒而没有斜杠,那么转换就很容易了。解决方案如何?

1 个答案:

答案 0 :(得分:0)

您可以使用正则表达式来获取时间戳和偏移量:

preg_match('~(\d+)\d{3}((?:\+|-)\d+)~', $sale['Date'], $match);
print_r($match);

返回将是:

Array
(
    [0] => 1386834199000+0200
    [1] => 1386834199
    [2] => +0200
)

使用获取的时间戳,您现在可以格式化日期时间。在格式化时间戳时,您还可以考虑偏移(给定一个,或设置您的时区),如果需要的话:

$dt = new DateTime('@' . $match[1]);
$dt = new DateTime($dt->format('Y-m-d H:i:s') . ' ' . $match[2]);
# $dt->setTimezone(new DateTimezone("your_timezone"));
print_r($dt);

return将是DateTime对象:

DateTime Object
(
    [date] => 2013-12-12 07:43:19
    [timezone_type] => 1
    [timezone] => +02:00
)

可以根据您的需要进行格式化:

$createdDate = dt->format('d-m-Y H:i:s');