2010-06-30 51 views
4

我正在尝试时间轴图: http://code.google.com/apis/visualization/documentation/gallery/annotatedtimeline.html#Data_Format 数据以JSON订阅源的形式出现。如何在json中输出javascript日期

谷歌希望将数据是这样的:

{ 
    version:'0.6', 
    reqId:'0', 
    status:'ok', 
    sig:'4641982796834063168', 
    table:{ 
     cols:[ 
     { 
      id:'A', 
      label:'NEW A', 
      type:'string' 
     }, 
     { 
      id:'B', 
      label:'B-label', 
      type:'number' 
     }, 
     { 
      id:'C', 
      label:'C-label', 
      type:'datetime' 
     } 
     ], 
     rows:[ 
     { 
      c:[ 
       { 
        v:'c' 
       }, 
       { 
        v:3.0, 
        f:'3' 
       }, 
       { 
        v:new Date(2008, 
        3, 
        30, 
        0, 
        31, 
        26     ), 
        f:'4/30/08 12:31 AM' 
       } 
      ] 
     } 
     ] 
    } 
} 

我怎么能输出没有它的日期功能被包裹在字符串分隔符像“日期()”。

+1

由于这是谷歌图表我发现他们确实允许日期字符串格式为“日期(yyyy,mm,dd [,hh,ss,ii])” json图表要求是无效的,因为它们使用不同的引用分数。 – Keyo 2010-06-30 03:51:35

+0

是的,它的作品!并且是最简单的解决方案。即只需删除“新”一词。 Keyo您在哪里找到指定日期的字符串?我无法在Charts API中看到它? (我想知道它是否是官方的,并且会保留)。 – scipilot 2014-09-21 01:10:40

回答

4

我只是包裹功能%%字符,像这样:

$something = array('%%new Date(...) %%','somevalue'); 
$json = json_encode($something); 

并删除这些%%字符和字符串分隔符的旁边。

$json = preg_replace("/(('|\")%%|%%(\"|'))/",'', $json); 
+0

很棒的回答。谢谢 – jribeiro 2013-01-14 01:11:49

+0

请注意,这只适用于非常狭窄的用例。有些人可能会在这里想要在JSON中通过ajax等传输JS。请注意,在JSON中传输js将会a)默认情况下不工作(您需要评估响应)以及b)它不是用来像那。如果在JavaScript资源文件/脚本标记的输出中使用它,则可能仅在这里使用建议的解决方案。 – 2017-03-10 13:39:49

1

不幸的是,在JavaScript中没有“日期文字”(阵列可以[]来表达,并与{}对象,但为Date对象没有这样的爱)。而且,实际的,有效的JSON只接受原始值(比如字符串,数字,数组,布尔值,对象等等)。您也可能会惊讶地发现JSON中的Date()无效(尽管如果您不关心可移植性,这不是问题)。

如果您可以控制生成Feed的代码并使用它,但您可能需要执行其中一项操作。首先,将日期作为时间戳。这是很容易做到:

var dtDateTime = new Date('Jan 27 2011 00:00:00 GMT+0000'); 
var intDateTime = dtDateTime.getTime(); 
var objJSON = { 
    "datetime":intDateTime 
}; 

加载JSON后,您的代码将然后解析datetime有:

var dtDateTime = new Date(); 
dtDateTime.setTime(objJson.datetime); 

在这里,你的代码将不得不指望datetime属性,知道解码。所以这不是一个很好的通用解决方案。

我见过这个坚果破解的另一种方法是使用特殊的字符串文字,它表示您的脚本是日期时间。这可能是在值:

var objJSON = { 
    "datetime":"@Jan 27 2011 00:00:[email protected]" 
}; 

或者它可能是名称:

var objJSON = { 
    "@datetime":1296086400000 
}; 

@只是作为一个标志,你的代码值需要某种后处理。两者都会通过验证。 JSON的意思是简单和跨平台的,所以任何特定于JS的东西本质上都是不好的。如果您尝试将JSON加载到Java或C#中,则会遇到问题。

0
$data = preg_replace('@new Date\(([^\)]*)\)@', '"$1"', $data); 
    $data = json_decode($data, true); 

结果:

新日期(2008,3,30,0,31,26)=> “2008,3,30,0,31,26”

相关问题