如何格式化.Net DataContractJsonSerializer格式的PHP日期?

时间:2013-06-26 08:42:54

标签: php json datetime

需要使用PHP以下列格式在JSON帖子中发送日期

\/Date(410256000000-0800)\/

如何在PHP中将标准dd-mm-yyyy h:i:s日期时间(如01-01-2013 12:00:00)转换为该格式?只需知道哪些值对应于该格式的内容,而不是真正寻找stringify事情的答案。

2 个答案:

答案 0 :(得分:3)

这应该这样做:

$dateTime = DateTime::createFromFormat('d-m-Y H:i:s', '01-01-2013 12:00:00');

$requiredJsonFormat = sprintf(
    '\/Date(%s%s)\/',
    $dateTime->format('U') * 1000,
    $dateTime->format('O')
);

echo $requiredJsonFormat; // prints '\/Date(1357038000000+0100)\/'

我希望您能找到UO来自http://php.net/date的格式。

另一种方法是使用PHP的DOTNET API并直接从PHP使用DataContractJsonSerializer类。但是,您需要在服务器上安装.NET并使用PHP的DOTNET API相当神秘。

更有趣的部分是你需要这种格式的原因。这在http://weblogs.asp.net/bleroy/archive/2008/01/18/dates-and-json.aspx

的博文中有解释
  

但是由于EcmaScript规范中的一个奇怪的疏忽,没有标准的方法来描述JSON中的日期。 [...]我们目前的方法是在JSON规范中使用一个小漏洞。在JSON字符串文字中,您可能(或可能不)转义某些字符。在这些角色中,奇怪的是,有斜线字符('/')。 [...]新格式为“/ Date(1198908717056)/”,其中该数字再次是自1970年1月1日UTC以来的毫秒数[...]重点是,这消除了一个看起来像同一日期的字符串的日期文字的歧义literal,同时保留纯JSON,将由任何标准JSON解析器解析。当然,一个不了解这个约定的解析器只会看到一个字符串,但是那些能够解析那些作为日期而没有误报风险的解析器

答案 1 :(得分:1)

我们为此创建了一个软件包:https://github.com/webapix/dot-net-json-date-formatter

它使用与上一个答案类似的方法,并在PHP版本> = 5.6上进行了测试。

expirationDateTime