PHP返回的JSON对象是否包含日期对象

时间:2009-09-15 17:41:16

标签: php javascript json datetime date

有没有办法在PHP中创建包含javascript date对象的JSON对象? json_encode会自动将PHP的DateTime转换为Javascript的date吗?

5 个答案:

答案 0 :(得分:13)

JavaScript Date对象不是有效的JSON,只能在野外看到,因为很多人用完整的eval()解析他们的JSON。

一个简单易读的替代方法是将日期作为字符串以Date.parse()支持的格式发送。

你的JSON:

{
    date: '<?php echo date("r", $myDate); ?>'
}

您的JavaScript:

var myDateObj = new Date(Date.parse(myJSON.date));

来源:http://json.org/ - 请参阅右侧的框以获取有效JSON数据类型的列表。

答案 1 :(得分:9)

您可以将日期/时间作为UNIX时间戳传递,该时间戳是一个整数,是JSON中本机支持的数据类型。 PHP中的DateTime有一个“getTimestamp()”函数,它将为您提供该值。

答案 2 :(得分:1)

简答:不。

JSON只是文本,所有值都是数组,对象,数字,字符串,布尔值或null。在这种情况下,“对象”基本上只是一个PHP数组 - 它不能有方法。您需要手动将日期(将是字符串)转换为日期。

JSON的正式定义是http://www.json.org/

答案 3 :(得分:1)

虽然我同意@postfuturist的答案,但还有另一种方法:使用语法糖的正则表达式。

$json_data = json_encode(['test' => '__' . $_SERVER['REQUEST_TIME']]);

$json_data = preg_replace_callback('/"__([0-9]{10})"/u', function ($e) {
    return 'new Date(' . ($e[1] * 1000) . ')';
}, $json_data);

哪会产生:

string(32) "{"test":new Date(1385820141000)}"

Object {test: Sat Nov 30 2013 14:02:21 GMT+0000 (GMT)}

如果要在JavaScript中处理JSON数据。

这将涵盖大多数用例(请注意,UNIX时间戳不一定是10个字符长)。如果在生产中使用,应使用更多的语法糖来防止意外更换价值。

只有在页面加载时注入JSON时才应该使用它,而不是通过XHR注入,例如。

<html>
<head>
<script>
var myData = <?=$json_data?>;
</script>
</head>
<body>
</body>
</html>

答案 4 :(得分:-8)

当然!使用:

var JSONWithDate = {
    "Date": new Date(<?php echo date("Y, ").(date(n) - 1).date(", j") ?>)
};

编辑:添加代码示例。

这是我的代码,它起作用。

<html>
<body>
<script>
var J = { "Date": new Date(<?php echo date("Y, ").(date("n") - 1).date(", j") ?>) }
document.write(J["Date"]);
</script>
</body>
</html>

编辑2:使它更像JSON。

这是我的PHP代码。

<html>
<body>
<script>
<?php
function GetJSONDate($FieldName = "Date") {
    return "\"$FieldName\": new Date(".date("Y, ").(date("n") - 1).date(", j").")";
}
?>

function PrintJSONFromPHP(pJSONStr) {
    var aJSONObj = eval('('+pJSONStr+')');
    document.write(aJSONObj["Date"]);
}

var aJSONStr = '{ <?php echo GetJSONDate($FieldName = "Date"); ?> }';
PrintJSONFromPHP(aJSONStr);
</script>
</body>
</html>

它生成以下HTML代码:

<html>
<body>
<script>
function PrintJSONFromPHP(pJSONStr) {
    var aJSONObj = eval('('+pJSONStr+')');
    document.write(aJSONObj["Date"]);
}

var aJSONStr = '{ "Date": new Date(2009, 8, 15) }';
PrintJSONFromPHP(aJSONStr);
</script>
</body>
</html>

运行时,显示:

Tue Sep 15 2009 00:00:00 GMT-0600 (CST) 

如果您可以传递一个看起来像JavaScript对象文字的字符串(不在其中使用变量),则该字符串可以是eval以转换为对象。这意味着您可以将其用作JSON。

希望这有帮助。